JAVA 设计模式 桥接模式

逃离我推掉我的手 2022-04-25 00:06 250阅读 0赞

用途


桥接模式 (Bridge)

抽象部分与 实现部分 分离,使它们都可以独立的变化。

桥接模式是一种 结构式模式

结构


![Image 1][]

图-桥接模式结构图

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设计模式》

[Image 1]:

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVA设计模式--模式

    目录 一、什么是桥接模式 二、桥接模式的应用场景 三、桥接模式的结构 四、使用桥接模式重写消息示例 五、桥接模式的适用性 六、桥接模式的特点 七、总结 ----

    相关 设计模式-模式

    桥接模式 简介 将一些关系紧密的类拆分为抽象和实现两个独立的层次结构。 例子 例如空调和电视机,它们都有自己的遥控器,现在让你设计类该如何设计? 1.

    相关 设计模式 : 模式

           对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类的实现与它的父类有非常紧密的依赖关系.以至于父类实现中的任何变化必然会导致子类发生变