JAVA 设计模式 桥接模式

简介: 用途 桥接模式 (Bridge) 将抽象部分与实现部分分离,使它们都可以独立的变化。 桥接模式是一种结构式模式。 结构 图-桥接模式结构图 Implementor : 定义实现接口。
用途
桥接模式 (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设计模式系列



参考资料

《大话设计模式》

《HeadFirst设计模式》
目录
相关文章
|
10月前
|
设计模式 Java API
设计模式——代理模式详解(Java版)
设计模式——代理模式详解(Java版)
|
设计模式 前端开发
Java-设计模式-20-中介者模式
中介者模式(Mediator Pattern)就是用一个中介类将多个对象和类之间的交互全部放到该类中来处理,这样使得对象之间不需要显式的相互通信,降低代码的耦合性。也属于行为型模式。
43 0
Java-设计模式-20-中介者模式
|
设计模式 Java
Java中常用的设计模式【装饰器模式】
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
99 0
Java中常用的设计模式【装饰器模式】
|
设计模式
Java--设计模式-5-桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
76 0
Java--设计模式-5-桥接模式
|
设计模式
Java--设计模式-6-外观模式
外观模式(Facade Pattern)应该是最好理解的一个设计模式了,在我们项目中向外部提供一个外部可以访问系统的接口,然由这个接口去耦合子系统或者子接口,外部与子接口完全解耦。这种类型的设计模式属于结构型模式。
67 0
Java--设计模式-6-外观模式
|
设计模式
Java-88-设计模式-4-适配器模式
适配器(Adapter Pattern)可以将两个不兼容的接口的功能连起来。适配器就是两个不兼容的接口之间的桥梁。也属于结构型模式。
68 0
Java-88-设计模式-4-适配器模式
|
设计模式
Java--设计模式-2-装饰器模式
装饰器模式(Decorator Pattern)就是在不改变原始对象本质的前提下,对现有类进行包装,从而提供出额外的功能。
69 0
Java--设计模式-2-装饰器模式
|
设计模式 Java uml
java 设计模式之装饰器模式学习
java 设计模式之装饰器模式学习
100 0
java 设计模式之装饰器模式学习
|
设计模式 自动驾驶 Java
Java中的设计模式(三):装饰器模式
从多型号小鹏中学习装饰器模式
Java中的设计模式(三):装饰器模式
|
Java
JAVA中的设计模式四(装饰模式)
-------装饰模式   装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
1030 0