一、定义
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
二、优点及缺点
优点:
1、桥梁模式分离了抽象部分和实现部分,从而极大地提供了系统的灵活性。让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。
2、桥梁模式使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大提高了系统的可扩展性。
缺点:
1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
三、代码实现:
接口类:
package com.example.demo.sjms.qiaojiemoshi; /** * @Author: caesar * @Date:2020年10月20日 17:10:39 * @Description: 接口类 */ public interface ClassInterface { public void println(); }
两个接口类:
package com.example.demo.sjms.qiaojiemoshi; /** * @Author: caesar * @Date:2020年10月20日 17:10:02 * @Description: classA */ public class ClassA implements ClassInterface{ @Override public void println() { System.out.println("这是ClassA的方法!!!"); } }
package com.example.demo.sjms.qiaojiemoshi; /** * @Author: caesar * @Date:2020年10月20日 18:10:11 * @Description: classB */ public class ClassB implements ClassInterface{ @Override public void println() { System.out.println("这是classB!!!"); } }
桥接抽象类:
package com.example.demo.sjms.qiaojiemoshi; /** * @Author: caesar * @Date:2020年10月20日 17:10:09 * @Description: 桥梁模式抽象类 */ public abstract class BridgeAbstract { private ClassInterface classInterface; public BridgeAbstract(ClassInterface classInterface){ this.classInterface = classInterface; } public abstract void addPrintln(); }
桥接实现类:
package com.example.demo.sjms.qiaojiemoshi; /** * @Author: caesar * @Date:2020年10月20日 17:10:42 * @Description: 桥梁类 */ public class Bridge extends BridgeAbstract{ public Bridge(ClassInterface classInterface){ super(classInterface); } @Override public void addPrintln() { super.classInterface.println(); System.out.println("这是桥梁类的实现方法!!!"); } }
测试:
package com.example.demo.sjms.qiaojiemoshi; /** * @Author: caesar * @Date:2020年10月20日 18:10:06 * @Description: 测试类 */ public class Test { public static void main(String[] args) { ClassInterface classA = new ClassA(); ClassInterface classB = new ClassB(); BridgeAbstract bridgeA = new Bridge(classA); BridgeAbstract bridgeB = new Bridge(classA); bridgeA.addPrintln(); bridgeB.addPrintln(); } }
四、源码级别
五、总结
使用场景:
1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。