-
桥接模式将继承关系转化成关联关系,降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。
-
桥接模式的UML图
-
桥接模式的代码实现
-
创建一个抽象类
/** * 抽象类,交接模式的最终目的就是建立一个抽象类的对象,结构型模式注重的是对象的结构创建, * 这种模式不负责生产对象 */ public abstract class Car { /** * 关联关系,抽象类使用接口实现类的方式通过关联关系进行的,这是桥接模式的一大特点 */ Color color; /** * 关联关系的重要性: * 1. 关联关系是弱关联(降低耦合度),如果想要增加汽车的颜色维度,只需要实现Color就行了,不会影响其他颜色的正常运行 * 2. 在使用Color属性的时候没有通过继承或者实现,者就是桥接模式的特点之一,相比于适配器模式, * 关联关系的桥接模式更加容易达到抽象对象结构(抽象对象属性)的建立;而适配器模式达到了接口兼容合作的目的 * * @param color */ public void setColor(Color color) { this.color = color; } abstract void makeCar(String carType); }
-
创建服务于抽象类的实现类接口(属性接口)
/** * 实现类接口,为了服务于抽象类(Car),为抽象类提供必要的属性或者维度 */ public interface Color { void addColor(String carType); }
-
创建实现类接口的实现类(属性的具体实现)
public class White implements Color { @Override public void addColor(String carType) { System.out.println(carType + "white"); } }
public class Black implements Color { @Override public void addColor(String carType) { System.out.println(carType + "black"); } }
-
创建抽象类的实现类,并通过关联关系,实现抽象类与属性接口的关联
/** * 抽象类的具体实现类,遵从了面向接口编程(面向接口编程就是面向抽象类编程) */ public class CarImpl extends Car { @Override void makeCar(String carType) { color.addColor("carType"); } }
-
编写测试类
public class Test { public static void main(String[] args) { CarImpl carImpl = new CarImpl(); White white = new White(); carImpl.setColor(white); carImpl.makeCar("bmw"); } }
-
-
结构型模式和建造型模式的关系:结构型模式是为了更好的组合对象结构,组合完对象之后,就可以通过建造型模式进行生产。工厂模式创建的原材料就是结构型模式提供的。
-
桥接模式的优点
- 分离抽象接口及其实现部分,实现了比继承更好的解决方案。
- 桥接模式提高了系统的可扩展性,在两个维度中任意扩展一个维度,都不需要修改原有系统。
- 实现细节堆客户端透明,可以对用户隐藏实现细节。
-
桥接模式的缺点
- 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
- 桥接模式要求正确识别出系统中两个独立变化的维度,因此使用范围具有一定的局限性。
-
桥接模式的使用场景
- 如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,通过桥接模式可以使他们在抽象层建立一个关联关系。
- 对于不希望使用继承或因为多层次继承导致系统leukemia的个数几句增加的系统,桥接模式尤为适用。
- 一个类存在两个独立的变化维度,且这两个维度都需要扩展。
-
JDK中桥接模式的使用
设计模式--桥接模式
最新推荐文章于 2020-08-06 16:04:29 发布