桥接模式:
桥接模式是指将抽象部分和它的实际部分分离,使它们可以独立地变化。
桥接模式的构成:
桥接模式的各部分:
1、Abstraction接口:定义抽象部分的接口,维持Implementor对象的一个参考。
2、RedfinedAbstraction类:实现Abstraction的实类。
3、Implementor接口:定义implemention类的接口,规定一些常用的方法。
4、ConcreteImplementor类:实现了Implementor接口的类。
桥接模式的举例:
在购买杯饮时,会选择饮料的类型和容量,不同的类型和容量价格也相应不同,下面是运用桥接模式模拟这几种不同的组合得到的价格。
代码如下:
public interface TeaKind { public float price(); }
public class GreenTea implements TeaKind { public float price() { return 2.0f; //绿茶的价格 为了方便就没有定义成静态常量 } }
public class RedTea implements TeaKind { public float price() { return 3.0f; //红茶的价格 为了方便就没有定义成静态常量 } }
public interface TeaSize { public float getPrice(); }
public class MedTea implements TeaSize { public TeaKind teaKind; public MedTea(TeaKind teaKind) { this.teaKind = teaKind; } public float getPrice() { return 1.5f*teaKind.price(); } }
运行结果:public class SupTea implements TeaSize { public TeaKind teaKind; public SupTea(TeaKind teaKind) { this.teaKind = teaKind; } public float getPrice() { return 2.5f*teaKind.price(); } }
桥接模式的应用场景:
1、当要避免抽象部分和实现部分的永久绑定,例如实现部分必须在运行时被选择的时候,使用桥接模式。
桥接模式的优缺点:
优点:
1、分离接口和实现部分。
2、提高了可扩展性。可以独立的经行扩充。
3、实现细节对客户的透明。即对客户隐藏实现细节。
缺点:
当有两个后两个以上唯度变化时,同时要增加聚合对象的内部方法,因为它不得不多写方法以便包含它的类调用。