1、定义
(Bridge)将抽象部分与它的实现部分分离,是他们都可以独立地变化。
2、使用场景
有一个N品牌的手机,这个手机上有一个小游戏,也有通讯录软件,然后又有一个M品牌的手机,同时也有小游戏,和通讯录软件。如果有更多的手机品牌,那么每个品牌的手机也会有对应的手机软件。
3、代码结构UML图

手机品牌:Abstraction 抽象;
手机软件:Implementor 实现;
手机品牌N、M:被提炼的抽象;
通讯录、游戏:具体的实现。
4、类的实现
(1)、HandsetSoft (手机软件抽象类)
public abstract class HandSetSoft {
public abstract void run();
}
(2)、HandsetGame、HandsetAddressList (游戏、通讯录具体类)
public class HandsetGame extends HandSetSoft{
@Override
public void run() {
System.out.println("运行手机游戏");
}
}
public class HandsetAddressList extends HandSetSoft {
@Override
public void run() {
System.out.println("运行手机通讯录");
}
}
(3)、HandsetBrand (手机品牌类)
public abstract class HandsetBrand {
protected HandSetSoft soft;
//品牌需要关注软件,所以可在机器中按安装软件(设置手机软件),已备运行
public void setHandsetSoft(HandSetSoft soft) {
this.soft = soft;
}
//运行
public abstract void run();
}
(4)、HandsetBrandN、HandsetBrandM (品牌N、品牌M)
public class HandsetBrandN extends HandsetBrand {
@Override
public void run() {
soft.run();
}
}
public class HandsetBrandM extends HandsetBrand {
@Override
public void run() {
soft.run();
}
}
5、客户端调用
public static void main(String[] args) {
HandsetBrand ab;
ab = new HandsetBrandN();
ab.setHandsetSoft(new HandsetGame());
ab.run();
ab.setHandsetSoft(new HandsetAddressList());
ab.run();
ab=new HandsetBrandM();
ab.setHandsetSoft(new HandsetGame());
ab.run();
ab.setHandsetSoft(new HandsetAddressList());
ab.run();
}
输出:

6、总结
实现系统可能有多个角度分类,如把手机看成抽象类、下面有品牌N、M,品牌下面有对应的通讯录软件、和游戏等。
每一种分类都有可能的变化,那么就把这种多角度分离出来让他们独立变化,减少他们之间的耦合。
参考:《大话设计模式》
本文深入解析桥接设计模式,通过手机品牌与软件的实例,阐述如何将抽象与实现分离,以达到两者独立变化的目的,降低系统复杂度。
816

被折叠的 条评论
为什么被折叠?



