桥接模式:将抽象部分与它的实现部分相分离,使他们能够独立的变化。html
特征:java
- 三个关键词,也就是抽象化、实现化和脱耦
- 桥接模式将抽象部分和实现部分分离,解耦
- 两个维度,独立变化,灵活的扩展
简书:Android 设计模式之桥接模式web
public abstract class Coffee { protected CoffeeAdditives impl; public Coffee (CoffeeAdditives impl) { this.impl = impl; } /** * 咖啡具体是什么样的由子类决定 */ public abstract void makeCoffee(); }
//大杯咖啡 public class LargeCoffee extends Coffee { public LargeCoffee(CoffeeAdditives coffeeAdditives) { super(coffeeAdditives); } @Override public void makeCoffee() { System.out.println("大杯的" + impl.addSomething() + "咖啡"); } }
//小杯咖啡 public class SmallCoffee extends Coffee { public SmallCoffee(CoffeeAdditives coffeeAdditives) { super(coffeeAdditives); } @Override public void makeCoffee() { System.out.println("小杯的" + impl.addSomething() + "咖啡"); } }
public abstract class CoffeeAdditives { /** * 具体添加什么东西由子类决定 * * @return 添加的东西,好比加糖 */ public abstract String addSomething(); }
//加糖 public class Sugar extends CoffeeAdditives { @Override public String addSomething() { return "加糖"; } }
//不加糖,这里就是原味了 public class Ordinary extends CoffeeAdditives { @Override public String addSomething() { return "原味"; } }
//原味 Ordinary ordinary = new Ordinary(); //加糖 Sugar sugar = new Sugar(); //大杯咖啡,原味 LargeCoffee largeCoffee = new LargeCoffee(ordinary); largeCoffee.makeCoffee(); //小杯咖啡,原味 SmallCoffee smallCoffee = new SmallCoffee(ordinary); smallCoffee.makeCoffee(); //大杯咖啡,加糖 LargeCoffee largeCoffeeSugar = new LargeCoffee(sugar); largeCoffeeSugar.makeCoffee(); //小杯咖啡,加糖 SmallCoffee smallCoffeeSugar = new SmallCoffee(sugar); smallCoffeeSugar.makeCoffee();
大杯的原味咖啡
小杯的原味咖啡
大杯的加糖咖啡
小杯的加糖咖啡编程
经过以上的例子咱们能够看出桥接模式可以分离抽象与实现,并且扩展也很灵活。好比咱们须要添加个中杯的咖啡,只须要在抽象部分,也就是写个Coffee的子类MiddleCoffee就好了,而实现部分,CoffeeAdditives则不受影响。若是咖啡须要加盐或是其余什么的一样也很简单。segmentfault
优势:
一、抽象和实现的分离。
二、优秀的扩展能力。
三、实现细节对客户透明。设计模式
缺点:桥接模式的引入会增长系统的理解与设计难度,因为聚合关联关系创建在抽象层,要求开发者针对抽象进行设计与编程。ide
AbsListView跟ListAdapter之间就是一个桥接模式。
另外,Window 与 WindowManager 之间也是桥接模式。svg
segmentfault: 桥接模式
菜鸟教程:桥接模式
百度百科:桥接模式
博客园:《JAVA与模式》之桥梁模式
简书:Android 设计模式之桥接模式this