一:背景
这里拿大话设计模式一书中的例子来说,有两种实体,手机和手机软件;我们在每种手机品牌上都有各种的软件app来运行,如何表示呢?一般有两种维度划分,通过手机品牌分类,每种品牌下分软件类;另一中以手机软件app类型划分,类型下分手机品牌;可以发现,这两种拓展性都不好,耦合太高,所以,这里通过聚合的优于继承的原则,就有了桥接模式。
二:概述
1,定义
将抽象与它的实现部分分离,使它们都可以独立的变化。
2.类图结构
三:实例分析
就拿上面手机品牌和手机软件的例子来说
下面代码
手机软件:
public abstract class HandsetSoft {
abstract void run();
}
举两个例子,手机游戏软件和通讯录软件:
public class HandsetGame extends HandsetSoft{
@Override
void run() {
System.out.println("运行手机游戏");
}
}
public class HandsetAddressList extends HandsetSoft{
@Override
void run() {
System.out.println("运行手机通讯录");
}
}
手机品牌:
public abstract class HandsetBrand {
protected HandsetSoft handsetSoft;
//设置手机软件
public void setHandsetSoft(HandsetSoft handsetSoft){
this.handsetSoft = handsetSoft;
}
//运行
public abstract void run();
}
两个手机品牌的实现:
public class HandsetBrandM extends HandsetBrand {
@Override
public void run() {
System.out.println("我是m哦");
handsetSoft.run();
}
}
public class HandsetBrandN extends HandsetBrand {
@Override
public void run() {
System.out.println("我是n哦");
handsetSoft.run();
}
}
来看看客户端调用:
HandsetBrand ab;
ab = new HandsetBrandN();
ab.setHandsetSoft(new HandsetAddressList());
ab.run();
ab.setHandsetSoft(new HandsetGame());
ab.run();
ab = new HandsetBrandM();
ab.setHandsetSoft(new HandsetAddressList());
ab.run();
ab.setHandsetSoft(new HandsetGame());
ab.run();
至此,我们对桥接就有了一个基本的认识了。
参考书籍:《大话设计模式》