桥接模式
定义
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
桥接模式的作用是在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。
类的功能层次结构
假设有一个类something。当我们想在something中增加新功能时,会编写一个something的子类,即somethingGood类。这样就构成了一个小小的类层次结构。
something
– somethingGood
这就是为了增加新功能而产生的层次结构
类的实现层次结构
在模板模式中,我们学习了抽象类的作用,抽象类声明了一些抽象方法,定义了接口,然后子类负责去实现这些抽象方法。父类的任务是通过声明抽象方法的方式定义接口,而子类的任务是实现抽象方法。正是由于父类和子类的这种任务分担,我们菜可以编写出具有高可替换性的类。
这里企事业存在层次结构。例如,当子类ConcreteClass实现了父类AbstractClass类的抽象方法时,它们之间就构成了一个小小的层次结构。
AbstractClass
– ConcreteClass
但是,这里的类层次结构并非用于增加功能,也就是说,这种层次结构并非用于方便我们增加新的方法。它真真的作用是帮助我们实现下面这样的任务分担。
这种层次结构被称为“类的实现层次结构”
类图
Abstraction(抽象化)
处于“类的功能层次结构”最上层,它使用Implementor角色的方法定义了基本的功能。保存了Implementor角色的实例。
RefinedAbstraction(改善后的抽象化)
在Abstraction的基础上增加了新功能的角色。
Implementor(实现者)
位于“类的实现层次结构”的最上层。定义了用于实现Abstraction的接口的方法。
ConcreteImplementor(具体实现者)
负责实现在Implementor中定义的接口
示例
类图
Display
1 | public class Display { |
CountDisplay
1 | public class CountDisplay extends Display { |
DisplayImpl
1 | public abstract class DisplayImpl { |
StringDisplayImpl
1 | public class StringDisplayImpl extends DisplayImpl { |
Main
1 | public class Main { |