设计模式之桥接模式
桥接模式定义:将抽象和实现解耦,使得两者可以独立变化
关键点:1.分离抽象和具体 2.用聚合方式(桥)连接抽象和具体
用的不多,了解即可
桥梁模式通过类图
Abstraction:抽象化角色
它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类
Implementor:实现化角色
它是接口或者抽象类,定义角色必需的行为和属性。
RefinedAbstraction:抽象化角色的具体
ConcreteImplementor:实现化角色的具体
2.桥接模式通用源码
2.1 实现化角色
public interface Implementor { void doSomething(); void doAnything(); }
2.2 创建实现化角色具体
public class ConcreteImplementor1 implements Implementor { @Override public void doSomething() { // 业务逻辑处理 } @Override public void doAnything() { // 业务逻辑处理 } }
2.3 创建 抽象化角色
public abstract class Abstraction { // 定义对实现化角色的引用 private Implementor implementor; public Abstraction(Implementor implementor) { this.implementor = implementor; } // 自身的行为和属性 public void request() { this.implementor.doSomething(); } // 实现化角色 public Implementor getImplementor() { return implementor; } }
2.4 创建抽象化角色具体
public class RefineAbstraction extends Abstraction { public RefineAbstraction(Implementor implementor) { super(implementor); } // 修正父类的行为 @Override public void request() { super.request(); super.getImplementor().doAnything(); } }
2.5 创建Client调用
public class Client { public static void main(String[] args) { // 定义一个实现化角色 Implementor implementor = new ConcreteImplementor1(); // 定义一个抽象化角色 Abstraction abstraction = new RefineAbstraction(implementor); // 执行代码 abstraction.request(); } }
3.桥接模式的优点
- 抽象和实现分类:为了解决继承的缺陷而提出的设计模式
- 优秀的扩充能力
- 实现细节归客户透明
4.桥接模式的使用场景
- 不希望或者不适合使用继承的场景
- 抽象或者抽象类不稳定的场景
- 重要性要求较高的场景
桥接模式的意图还是对变化的封装,尽量把可能变化的因素封装到最细,最小的逻辑单元之中,避免风险扩散