一、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(); } }
二、桥接模式定义
将抽象部分与他的实现部分分离,使他们可以独立的变化。就以上例子而言,实际上是手机既可以以品牌分类,也可以按照功能分类。如果增加新的功能或者新的品牌的手机,都只需要添加实现类即可。
桥接模式结构图: