1、桥连接模式的定义
将抽象部分与实现部分分离,使他们都可以独立的进行变化。
2、桥连接模式的使用场景
简单说就是一个类存在两份独立变化的维度,且这两个维度都需要进行扩展。
3、桥连接模式的图解
ps:现实中有的人喜欢喝咖啡,咖啡一般分为四种:大杯加糖、大杯原味、小杯加糖、小杯原味。以这个为例子 进行图解。
4、桥连接模式的代码解释
A: abstration---->抽象部分
先定义一个抽象的Coffee类,里面维护一个加糖还是不加糖的CoffeeAdditives一个实现类,具体加入啥有CoffeeAdditives的子类决定,但是杯子的大小是由Coffee的子类控制的
/** * Created by LuanXianSheng on 2017/3/1. * 定义一个咖啡的抽象类,咖啡分为大杯加糖 大杯原味 小杯加糖 小杯原味 */ public abstract class Coffee { //实现部分,具体往咖啡里面加什么 protected CoffeeAdditives ipml ; public Coffee(CoffeeAdditives ipml){ this.ipml = ipml ; } /** * 什么大小的咖啡由子类实现 */ public abstract void makeCoffee(); }
子类1:大杯的
/** * Created by LuanXianSheng on 2017/3/1. */ public class LargeCoffee extends Coffee { private CoffeeAdditives ipml ; public LargeCoffee(CoffeeAdditives ipml) { super(ipml); this.ipml =ipml; } @Override public void makeCoffee() { Log.i("Log","LargeCoffee:"+"大杯"+ipml.addSomething()+"的咖啡") ; } }
子类2:小杯的
/** * Created by LuanXianSheng on 2017/3/1. */ public class SmallCoffee extends Coffee { private CoffeeAdditives ipml ; public SmallCoffee(CoffeeAdditives ipml) { super(ipml); this.ipml =ipml; } @Override public void makeCoffee() { Log.i("Log","SmallCoffee:"+"小杯"+ipml.addSomething()+"的咖啡") ; } }
B: implementor---->实现部分
具体往Coffee里面加不加糖
/** * Created by LuanXianSheng on 2017/3/1. * 实现部分 具体往杯子里面加不加东西由子类实现 */ public abstract class CoffeeAdditives { public abstract String addSomething(); }
子类1:加糖
public class Suger extends CoffeeAdditives { @Override public String addSomething() { return "加糖"; } }
子类2:原味
public class Ordinary extends CoffeeAdditives { @Override public String addSomething() { return "原味"; } }
C:应用:
//加糖 Suger suger = new Suger() ; //原味 Ordinary ordinary = new Ordinary(); //大杯加糖 LargeCoffee ls = new LargeCoffee(suger); ls.makeCoffee(); //大杯原味 LargeCoffee lo = new LargeCoffee(ordinary); lo.makeCoffee(); //小杯加糖 SmallCoffee ss = new SmallCoffee(suger) ; ss.makeCoffee(); //小杯原味 SmallCoffee so = new SmallCoffee(suger) ; so.makeCoffee();代码逻辑很简单 ,不难理解!然而呢,这个模式的应用确实不多,一个很重要的原因就是对于抽象与实现分离的把握,是不是需要分离?如何分离,对设计者来说要有一个恰到好的分寸!不管怎么说,桥连接模式的优点是毋庸置疑的,分离抽象与实现,灵活的扩展以及对客户来说透明的实现。
总结一句话:桥接模式应用来说理解很简单,但是设计很不容易!!!(当然对我这种还是比较菜的菜鸟来说)