23种设计模式(9) java桥接模式
介绍 桥接模式 (Bridge)将抽象部分与实现部分分离,使它们都可以独立的变化。 结构 代码实现 Implementor : 定义实现接口。 interface Implementor { // 实现抽象部分需要的某些具体功能 public void operationImpl(); } Abstraction : 定义抽象接口。 abstract class Abstraction { // 持有一个 Implementor 对象,形成聚合关系 protected Implementor implementor; public Abstraction(Implementor implementor) { this.implementor = implementor; } // 可能需要转调实现部分的具体实现 public void operation() { implementor.operationImpl(); } } ConcreteImplementor : 实现 Implementor 中定义的接口。 class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { // 真正的实现 System.out.println("具体实现A"); } } class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { // 真正的实现 System.out.println("具体实现B"); } } RefinedAbstraction : 扩展 Abstraction 类。 class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor implementor) { super(implementor); } public void otherOperation() { // 实现一定的功能,可能会使用具体实现部分的实现方法,// 但是本方法更大的可能是使用 Abstraction 中定义的方法, // 通过组合使用 Abstraction 中定义的方法来完成更多的功能。 } } 测试代码 public class BridgePattern { public static void main(String[] args) { Implementor implementor = new ConcreteImplementorA(); RefinedAbstraction abstraction = new RefinedAbstraction(implementor); abstraction.operation(); abstraction.otherOperation(); } } 运行结果 具体实现A 应用场景 1、如果你不希望在抽象和实现部分采用固定的绑定关系,可以采用桥接模式,来把抽象和实现部分分开, 2、如果出现抽象部分和实现部分都应该可以扩展的情况,可以采用桥接模式,让抽象部分和实现部分可以 3、如果希望实现部分的修改,不会对客户产生影响,可以采用桥接模式,客户是面向抽象的接口在运行, 4、如果采用继承的实现方案,会导致产生很多子类,对于这种情况,可以考虑采用桥接模式,分析功能变化的原因,看看是否能分离成不同的纬度,然后通过桥接模式来分离它们,从而减少子类的数目。 要点 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java泛型是一个全部还是没有决定?
- Java,UnsupportedClassVersionError.我怎样才能解决这个问题
- java.io.FileDescriptor#sync()是否特定于单个FileDescript
- Java编译 – 有没有办法告诉编译器忽略我的代码部分?
- The Java serialization algorithm revealed---reference
- java – HtmlUnit来查看源码
- Java将Stack trace发送到不同的输出流
- java – Clojure中的时间素数生成
- java – 杰克逊JSON不包含嵌套对象的属性
- 如何在java中的静态方法中使用此关键字?