企业为什么要做建站,新洲建设局网站,福建福州最新情况,专门做流程图的网站桥接模式 桥接模式简介桥接模式的实现总结 桥接模式简介 桥接模式#xff08;Bridge#xff09;是将抽象部分与它的实现部分分离#xff0c;使它们都可以独立地变化。它是一种对象结构型模式#xff0c;又称为柄体(Handle and Body)模式或接口(Interfce)模式。 桥接模式基于… 桥接模式 桥接模式简介桥接模式的实现总结 桥接模式简介 桥接模式Bridge是将抽象部分与它的实现部分分离使它们都可以独立地变化。它是一种对象结构型模式又称为柄体(Handle and Body)模式或接口(Interfce)模式。 桥接模式基于类的最小设计原则通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来从而可以保持各部分的独立性以及应对他们的功能扩展。 桥接模式遵循了里氏替换原则和依赖倒置原则最终实现了开闭原则对修改关闭对扩展开放。
桥接模式的实现
桥接Bridge模式包含以下主要角色。
抽象化Abstraction角色 定义抽象类并包含一个对实现化Implementor角色的引用。Abstraction 充当桥接类。 扩展抽象化Refined Abstraction角色 是抽象化Abstraction角色的子类实现父类中的业务方法并通过组合关系调用实现化Implementor角色中的业务方法。 实现化Implementor角色 定义实现化角色的接口供扩展抽象化Refined Abstraction角色调用。 具体实现化Concrete Implementor角色 给出实现化Implementor角色接口的具体实现。
定义实现化角色的接口
public interface Brand {void open();void close();void call();
}定义具体实现化角色给出实现化Implementor角色接口的具体实现。 定义具体实现化角色1
public class XiaoMi implements Brand{Overridepublic void open() {System.out.println(小米手机开机);}Overridepublic void close() {System.out.println(小米手机关机);}Overridepublic void call() {System.out.println(小米手机打电话);}
}定义具体实现化角色2
public class Vivo implements Brand{Overridepublic void open() {System.out.println(Vivo手机开机);}Overridepublic void close() {System.out.println(Vivo手机关机);}Overridepublic void call() {System.out.println(Vivo手机打电话);}
}定义抽象化Abstraction角色里面包含了对实现化角色的接口的引用
public abstract class Phone {//组合Brand接口private Brand brand;public Phone(Brand brand){super();this.brand brand;}//调用接口里的方法当该类的子类调用该类的方法时就会调用到接口里的方法protected void open(){brand.open();}protected void close(){brand.close();}protected void call(){brand.call();}
}定义扩展抽象化Refined Abstraction角色是抽象化Abstraction角色的子类实现父类中的业务方法并通过组合关系调用实现化Implementor角色中的业务方法。
public class FoldedPhone extends Phone{public FoldedPhone(Brand brand){super(brand);//调用父类的构造器初始化}public void open(){super.open();//通过组合关系调用实现化Implementor角色中的业务方法System.out.println(折叠样式手机);}public void close(){super.close();System.out.println(折叠样式手机);}public void call(){super.call();System.out.println(折叠样式手机);}
}定义客户端测试桥接模式
public class Client {public static void main(String[] args) {FoldedPhone phone new FoldedPhone(new XiaoMi());phone.open();phone.close();phone.call();System.out.println();FoldedPhone phone1 new FoldedPhone(new Vivo());phone1.open();phone1.close();phone1.call();}
}当我们要增加一个扩展抽象化Refined Abstraction角色只需继承抽象化Abstraction角色桥接类即可.
总结
优点
抽象与实现分离扩展能力强符合开闭原则符合合成复用原则其实现细节对客户透明
缺点
由于聚合关系建立在抽象层要求开发者针对抽象化进行设计与编程能正确地识别出系统中两个独立变化的维度这增加了系统的理解与设计难题
注意事项 实现了抽象和实现部分的分离从而极大的提供了系统的灵活性让抽象部分和实现部分独立开来这有助于系统进行分层设计从而产生更好的结构化系统。 对于系统的高层部分只需要知道抽象部分和实现部分的接口就可以了其它的部分由具体业务来完成。 桥接模式替代多层继承方案可以减少子类的个数降低系统的管理和维护成本。 桥接模式的引入增加了系统的理解和设计难度由于聚合关联关系建立在抽象层要求开发者针对抽象进行设计和编程 桥接模式要求正确识别出系统中两个独立变化的维度因此其使用范围有一定的局限性即需要有这样的应用场景。
桥接模式通常适用于以下场景
当一个类存在两个独立变化的维度且这两个维度都需要进行扩展时。当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。