soho建设外贸网站,网站建设任务分解,站长网ppt模板下载,织梦网站模板免费概述
桥接模式#xff08;Bridge Pattern#xff09;是一种结构型设计模式#xff0c;将抽象部分和实现部分分离#xff0c;使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系#xff0c;将抽象部分和实现部分分离开来#xff0c;从而使它们可以独立地变化。…概述
桥接模式Bridge Pattern是一种结构型设计模式将抽象部分和实现部分分离使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系将抽象部分和实现部分分离开来从而使它们可以独立地变化。这种分离使得抽象部分和实现部分可以独立地扩展和修改互不影响。
桥接模式由两个独立的层次结构组成抽象部分和实现部分。抽象部分定义了抽象类和接口它包含了对实现部分的引用并且定义了抽象方法。实现部分定义了接口和具体类它实现了抽象部分定义的接口并且提供了具体的实现。抽象部分和实现部分之间通过关联关系进行连接。
优点
可以将抽象部分和实现部分独立地进行扩展和修改互不影响。这样可以减少系统的复杂性。可以在运行时动态地将抽象部分和实现部分进行组合。这样可以根据需要来选择不同的实现方式。可以减少继承关系的使用。继承关系是一种静态的关系它在编译时就确定了而桥接模式是一种动态的关系它在运行时可以动态地进行组合。
缺点
增加了系统的复杂性因为需要定义抽象部分和实现部分的接口和维护它们之间的关系。对于简单的系统桥接模式可能会增加不必要的复杂性。
使用场景
当一个类存在两个或多个不相关的维度时可以使用桥接模式将其拆分成两个或多个独立的层次结构。当需要修改一个类的实现细节时可以使用桥接模式将其与其他类分离便于进行独立的修改。当希望避免在接口和实现部分之间出现强紧耦合关系时可以使用桥接模式。
示例
抽象电视和具体电视机制造厂商电视可以是液晶、等离子和CRT电视机而抽象电视可以根据不同的电视制造厂商进行操作。
首先定义一个抽象类代表抽象部分
public abstract class TV {protected Manufacturer manufacturer;protected TV(Manufacturer manufacturer) {this.manufacturer manufacturer;}public abstract void produce();
}
接下来定义一个实现部分的接口
public interface Manufacturer {public void manufacture();
}
为抽象类和接口添加具体的实现如下所示
public class Sony implements Manufacturer {public void manufacture() {System.out.println(Manufacturing TV by Sony);}
}public class Samsung implements Manufacturer {public void manufacture() {System.out.println(Manufacturing TV by Samsung);}
}
最后我们将实现部分的具体实现注入到抽象类中如下所示
public class SmartTV extends TV {public SmartTV(Manufacturer manufacturer) {super(manufacturer);}public void produce() {System.out.print(Producing Smart TV... );manufacturer.manufacture();}
}
现在我们可以使用桥接模式来生产不同制造商的智能电视如下所示
public class BridgePatternDemo {public static void main(String[] args) {TV sonySmartTV new SmartTV(new Sony());sonySmartTV.produce();TV samsungSmartTV new SmartTV(new Samsung());samsungSmartTV.produce();}
}
输出结果为 Producing Smart TV... Manufacturing TV by Sony Producing Smart TV... Manufacturing TV by Samsung