一天一个设计模式---桥接模式
2016-10-14 15:08
363 查看
介绍:将抽象部分与实现部分分离,使他们都可以独立地变化。这个设计使用多态实现
场景:看到桥接模式,我先想到的是桥梁……所以我就举个桥梁的例子来说明。对于桥梁,有两种:中国桥和美国桥。对于建筑师,也有两种:中国建筑师和美国建筑师。首先,说下原来的业务,中国建筑师只会造中国桥,美国建筑师会造美国桥。但是中国建筑师牛逼啊,学会了美国桥的建造。如果没有使用桥接模式,可能代码上会有很多问题。
建筑师
中国建筑师
桥梁
美国建筑师
中国桥
ps:后面的3中组合为了节省篇幅,这里就不再说明
中国桥
美国桥
开始造桥
输出示例
总结:
很好的体现了六大原则,保证模块的解耦,并且很方便扩展。我们这里如果需要扩展桥梁,只需要增加一个桥梁类。如果想要在维度上扩展,只需要在新的接口的具体实现类中添加桥梁类,并调用beBuild()方法即可。
更多模式:一天一个设计模式—分类与六大原则
更多源码: https://github.com/oDevilo/Java-Base
场景:看到桥接模式,我先想到的是桥梁……所以我就举个桥梁的例子来说明。对于桥梁,有两种:中国桥和美国桥。对于建筑师,也有两种:中国建筑师和美国建筑师。首先,说下原来的业务,中国建筑师只会造中国桥,美国建筑师会造美国桥。但是中国建筑师牛逼啊,学会了美国桥的建造。如果没有使用桥接模式,可能代码上会有很多问题。
一、未使用桥接
首先,我们有两个基础接口:1.建筑师-负责建造,2.桥梁-被建造建筑师
public interface Architect { public void build(); }
中国建筑师
public class ChineseArchitect implements Architect { @Override public void build() { System.out.println("this is a ChineseArchitect"); } }
桥梁
public interface Bridge { public void beBuild(); }
美国建筑师
public class USArchitect implements Architect { @Override public void build() { System.out.println("this is a USArchitect"); } }
中国桥
public class ChineseBridgeByChineseArchitect implements Bridge { @Override public void beBuild() { System.out.println("buil a ChinaBridge by ChineseArchitect"); } }
ps:后面的3中组合为了节省篇幅,这里就不再说明
二、使用桥接
这里有两种做法,桥梁绑定建筑师,或者建筑师绑定桥梁,我选择了桥梁绑定建筑师。中国桥
public class ChineseBridge implements Bridge { private Architect architect; public ChineseBridge(Architect architect) { this.architect = architect; } @Override public void beBuild() { architect.build(); System.out.println("buil a ChinaBridge"); } }
美国桥
public class USBridge implements Bridge { private Architect architect; public USBridge(Architect architect) { this.architect = architect; } @Override public void beBuild() { architect.build(); System.out.println("build a USBridge"); } }
开始造桥
Architect cArchitect = new ChineseArchitect(); Architect uArchitect = new USArchitect(); Bridge ccbBridge = new ChineseBridge(cArchitect); Bridge ucBridge = new USBridge(cArchitect); Bridge uuBridge = new USBridge(uArchitect); ccbBridge.beBuild(); System.out.println("======="); ucBridge.beBuild(); System.out.println("======="); uuBridge.beBuild();
输出示例
this is a ChineseArchitect buil a ChinaBridge ======= this is a ChineseArchitect build a USBridge ======= this is a USArchitect build a USBridge
总结:
很好的体现了六大原则,保证模块的解耦,并且很方便扩展。我们这里如果需要扩展桥梁,只需要增加一个桥梁类。如果想要在维度上扩展,只需要在新的接口的具体实现类中添加桥梁类,并调用beBuild()方法即可。
更多模式:一天一个设计模式—分类与六大原则
更多源码: https://github.com/oDevilo/Java-Base
相关文章推荐
- 一天一个设计模式之建造者模式(Builder)
- 一天一个设计模式(3):观察者模式
- 一天一个设计模式---适配器模式
- 一天一个设计模式---外观模式
- 一天一个设计模式---模板方法模式
- 一天一个设计模式之职责链模式(Chain of Responsibility)
- 一天一个设计模式---代理模式
- 一天一个设计模式---生成器模式
- 一天一个设计模式---状态模式
- 一天一个设计模式---工厂方法模式
- 一天一个设计模式(1): 代理模式
- 一天一个设计模式---分类与六大原则
- 一天一个设计模式(5):中介者模式
- 一天一个设计模式---观察者模式
- 一天一个设计模式之单例模式(singleton)
- 一天一个设计模式(2): 外观模式
- 一天一个设计模式--单例模式
- 一天一个设计模式——开篇概述
- 一天一个设计模式---组合模式
- 一天一个设计模式---策略模式