分享

一文带你学会“桥接模式”,不会你找我

 草容生 2023-11-03 发布于湖南

聊聊闲话

说说闲话,可以选择性地跳过。

后知后觉的我才发现,夏天就这么过去了,秋天竟然悄悄地走来了。一场一场的雨使得天气变得越来越凉了,大家应该多注意、别嫌麻烦,该添衣的时候也需要适量的多穿一点。本来每天写BUG就已经够辛苦了,再不对自己好点岂不是太委屈了。

桥接模式简介

桥接模式是结构型设计模式的一种。该模式的核心思想就是将“行为实现”和“抽象”拆分开,将其放在两个不同类层次中,使得这两个层次可以独立进行改变

桥接模式基于类的“最小设计原则”,通过封装、聚合、继承等行为,让不同的类承担不同的职责。

桥接模式设计UML类图:

一文带你学会“桥接模式”,不会你找我

桥接模式类图分析:

我们可以将桥接模式分为三层,分别是:使用者、抽象层、行为实现层。

使用者: 对应的是Client类。

抽象层: 对应的是Abstract类和它的子类RefinedAbstract。其中Abstract类中聚合了Implementor接口,该类还有一重要角色就是充当了桥接类。它相当于一座桥梁,连接了客户端和具体行为实现类。

行为实现层: 对应的是Implementor接口和它的实现类ConcreteImolImplementor1、ConcreteImolImplementor2。

只是通过简单的文字描述可能大家对“桥接模式”的理解还是不够清晰和深刻,别慌下面让我们通过一个小案例来深入了解一下该设计模式。

一文带你学会“桥接模式”,不会你找我

代码讲解

案例:面向不同品牌,不同类型的笔记本设计一个具有开关机的程序。

电脑品牌接口 => 对应行为实现类接口:

public interface NotebookBrand { // 开机 void open(); // 关机 void close();}

不同品牌的笔记本 => 行为实现的具体实现类:

public class HuaWeiNotebook implements NotebookBrand {  @Override  public void open() {    System.out.println('华为笔记本开机了!');  }  @Override  public void close() {    System.out.println('华为笔记本关机了!');  }}public class XiaoMiNotebook implements NotebookBrand{  @Override  public void open() {    System.out.println('小米笔记本开机了!');  }  @Override  public void close() {    System.out.println('小米笔记本关机了!');  }}

笔记本抽象类 => 对应抽象层的抽象类:

public abstract class AbsNotebook implements NotebookBrand { // 笔记本品牌 private NotebookBrand notebookBrand; // 构造 public AbsNotebook(NotebookBrand notebookBrand) { this.notebookBrand = notebookBrand; } @Override public void open() { this.notebookBrand.open(); } @Override public void close() { this.notebookBrand.close(); }}

不同种类的笔记本 => 对应抽象类的子类:

public class BusinessNotebook extends AbsNotebook {  // 构造方法  public BusinessNotebook(NotebookBrand notebookBrand) {    super(notebookBrand);  }  @Override  public void open() {    super.open();    System.out.println('商务笔记本!');  }  @Override  public void close() {    super.close();    System.out.println('商务笔记本!');  }}public class GameNotebook extends AbsNotebook{  // 构造方法  public GameNotebook(NotebookBrand notebookBrand) {    super(notebookBrand);  }  @Override  public void open() {    super.open();    System.out.println('游戏笔记本!');  }  @Override  public void close() {    super.close();    System.out.println('游戏笔记本!');  }}

客户端测试类:

public class Client { public static void main(String[] args) { AbsNotebook businessNotebook = new BusinessNotebook(new XiaoMiNotebook()); businessNotebook.open(); businessNotebook.close(); }}

总结

1、桥接模式分离了抽象和实现,提高了系统的灵活性。这样的设计理念将有助于我们对系统进行分层设计和开发。并且抽象和实现的分离可以促使程序解耦,使得这两个层次之间可以独立变化。

2、桥接模式可以替代多层继承方案,从而减少子类的个数,降低系统的管理和维护成本。

3、桥接模式会增加系统的理解和设计难度,由于聚合关联关系建立在抽象层,所以要求开发者针对抽象进行设计和编程。

4、桥接模式要求正确识别出系统中两个独立变化的维度(即抽象和实现),因此其使用范围有一定的局限性。

今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞加关注呦!你们的支持就是我坚持下去的动力。文章哪里写的有问题的也希望大家可以指出,我会虚心受教。

一文带你学会“桥接模式”,不会你找我

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多