一、bridge模式
-
需求
为不同款的手机设置相同的功能。
-
代码实现
手机功能抽象类:
public abstract class HandSetSoft {
public abstract void run();
}
手机品牌抽象类:
public abstract class HandSetBrand {
private HandSetSoft soft;
public void setSoft(HandSetSoft soft) {
this.soft = soft;
}
public HandSetSoft getSoft() {
return soft;
}
public abstract void run();
}
手机功能实现类:
public class HandSetGame extends HandSetSoft {
@Override
public void run() {
System.out.println("运行手机游戏");
}
}
public class HandSetAddressList extends HandSetSoft {
@Override
public void run() {
System.out.println("运行手机通讯录");
}
}
手机品牌实现类:
//手机品牌N
public class HandSetBrandN extends HandSetBrand {
@Override
public void run() {
super.getSoft().run();
}
}
//手机品牌S
public class HandSetBrandS extends HandSetBrand {
@Override
public void run() {
super.getSoft().run();
}
}
测试类:
public class Test {
public static void main(String[] args) {
//手机N品牌
HandSetBrand abN = new HandSetBrandN();
abN.setSoft(new HandSetGame());
abN.run();
abN.setSoft(new HandSetAddressList());
abN.run();
//手机S品牌
HandSetBrand abS = new HandSetBrandS();
abS.setSoft(new HandSetGame());
abS.run();
abS.setSoft(new HandSetAddressList());
abS.run();
}
}
二、桥接模式定义
将抽象部分与他的实现部分分离,使他们可以独立的变化。就以上例子而言,实际上是手机既可以以品牌分类,也可以按照功能分类。如果增加新的功能或者新的品牌的手机,都只需要添加实现类即可。
桥接模式结构图: