本文共 2241 字,大约阅读时间需要 7 分钟。
桥接模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。
特征:
- 三个关键词,也就是抽象化、实现化和脱耦
- 桥接模式将抽象部分和实现部分分离,解耦
- 两个维度,独立变化,灵活的扩展
简书:
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则不受影响。如果咖啡需要加盐或是其他什么的同样也很简单。
优点:
1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。
缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
AbsListView跟ListAdapter之间就是一个桥接模式。
segmentfault:
菜鸟教程: 百度百科: 博客园: 简书:转载地址:http://qouq.baihongyu.com/