浅谈设计模式之桥接模式
来源:互联网 发布:网络堵塞怎么解决方法 编辑:程序博客网 时间:2024/05/17 01:00
桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。要理解抽象与它的实现分离,这并不是说让抽象类与它的派生类分离,这并没有什么意义。实现指的是每个类继承体系都各自用来实现自己的对象,对于多个维度的变化各不影响。
比如,我们日常中都会使用各种品牌的手机,而每个品牌的预装软件都不尽相同。假如我们要设计各种各样的包括软硬件的手机的话,那就不可避免同时拥有各种品牌和软件,这时候无论以软件或者品牌作为父类都不合适,最恰当的方式是品牌中包含手机软件。这个就涉及到了组合/聚合的使用。
根据组合/聚合复用原则,程序中药尽量使用组合/聚合,尽量不要使用类的继承,以免系统组织的设计过于复杂。优先使用对象的组合/聚合有助于保持每个类的封装被集中在单个任务上。
聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分;组合则表示一种强的拥有关系,体现的是严*的部分与整体的关系,并且部分和整体的生命周期一样。
UML图如下:
//相当于品牌父类class Abstratction{ protected Implementor implementor; public void SetImplementor(Implementor implementor) { this.implementor = implementor; } public virtual void Operation() { implementor.Operation(); }}//相当于具体品牌class RefinedAbstraction : Abstraction{ public override void Operation() { implementor.Operation(); }}//相当于软件父类abstract class Implementor{ public abstract void Operation(); }//相当于具体运行的软件Aclass ConcreteImplementorA : Implementor{ public override void Operation() { Print("ConcreteImplementorA"); }}//相当于具体运行的软件Bclass ConcreteImplementorB : Implementor{ public override void Operation() { Print("ConcreteImplementorB"); }}static void Main(string[] args){ Abstraction ab = new RefinedAbstraction(); ab.SetImplementor(new ConcreteImplementorA()); ab.Operation(); ab.SetImplementor(new ConcreteImplementorB()); ab.Operation(); console.Read();}
桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。另外我们还需要掌控好这多个维度变化的分类,所以理解起来稍微复杂一点。
桥接模式的好处在于现在假如增加新的软件,那么也就是增加一个新的软件类并加以调用即可,而不会影响其他的类。其实这也恰好是开放-封闭原则的应用,封闭修改,开放拓展。
参考书籍:《大话设计模式》
0 1
- 浅谈设计模式之桥接模式
- 设计模式--浅谈桥接模式
- 浅谈设计模式-桥接模式
- 设计模式之策略模式浅谈
- 设计模式浅谈之单例模式
- 浅谈Java设计模式之---策略模式
- 浅谈Java设计模式之------代理模式
- 浅谈设计模式之观察者模式
- 浅谈设计模式之工厂模式
- 浅谈设计模式之Builder模式
- 浅谈设计模式之代理模式
- 浅谈设计模式之builder模式
- 浅谈设计模式之适配器模式
- 浅谈设计模式之单例模式
- 浅谈设计模式之访问者模式
- 浅谈设计模式之观察者模式
- 浅谈设计模式之外观模式
- 浅谈设计模式之策略模式
- 严重: Exception occurred during processing request: Position beyond number of declared ordinal paramet
- 第7章 程序调试与异常处理
- python的切片与迭代
- ssh,hibernate动态映射多表
- 架构设计:系统间通信(12)——RPC实例Apache Thrift 中篇
- 浅谈设计模式之桥接模式
- wmframework v2.0 手册(3-4-5)代码编写说明
- oracle的TM锁、TX锁
- Java代理模式
- [Android5.1]系统默认设置
- openURL
- android JSON数据解析分析
- 架构设计:系统间通信(13)——RPC实例Apache Thrift 下篇(1)
- 中文路径, 文件转换