设计模式之桥接模式

桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立的变化,属于结构型模式。

桥接模式中,实现的系统有多个角度的分类,每种分类都有可能变化,将继承关系转换为关联关系,让各种变化分离出来,使它们独立变化,减少各种变化之间的耦合。

组成

桥接模式由实现类接口 Implementor、具体实现类 ConcreteImplementor、抽象类 Abstraction 和扩充抽象类 RefinedAbstraction 组成。

其中实现类接口定义一种变化,具体实现类为其变化的具体实现;而抽象类为持有实现类接口引用的抽象,扩充抽象类继承抽象类,通过持有实现类接口来应对变化。

优点

抽象接口及其实现部分分离。

实现细节对客户端透明。

提高了系统的可扩充性,在多个变化维度中任意扩展一个维度,不需要修改原有系统。

缺点

增加系统的理解与设计难度,需要针对抽象进行设计与编码。

使用场景

当一个对象有多个维度的变化,需要将各种变化分离出来,使其独立变化时,可以使用桥接模式。

设计原则

遵循单一职责原则、最小知识原则(迪米特法则)、开闭原则,和复用原则。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public interface ImplementorColor {
void draw();
}

public class ConcreteImplementorRedColor implements ImplementorColor {
@Override
public void draw() {
System.out.println("red");
}
}

public class ConcreteImplementorGreenColor implements ImplementorColor {
@Override
public void draw() {
System.out.println("green");
}
}

public abstract class AbstractionShape {
protected ImplementorColor implementorColor;
protected AbstractionShape(ImplementorColor implementorColor){
this.implementorColor = implementorColor;
}
public abstract void draw();
}

public class RefinedAbstractionCircle extends AbstractionShape {

public RefinedAbstractionCircle(ImplementorColor implementorColor) {
super(implementorColor);
}

@Override
public void draw() {
implementorColor.draw();
System.out.println("circle");
}
}

public class Main {
public static void main(String[] args) {
ImplementorColor redColor = new ConcreteImplementorRedColor();
ImplementorColor greenColor = new ConcreteImplementorGreenColor();
RefinedAbstractionCircle redCircle = new RefinedAbstractionCircle(redColor);
RefinedAbstractionCircle greenCircle = new RefinedAbstractionCircle(greenColor);
redCircle.draw();
greenCircle.draw();
}
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • © 2016-2020 姜越

谢谢老板

支付宝
微信