设计模式(七):桥接模式Bridge(结构型模式)
来源:互联网 发布:程序员用英语怎么说 编辑:程序博客网 时间:2024/05/29 14:52
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
一. 适用性
1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
4.(C++)你想对客户完全隐藏抽象的实现部分。在C++中,类的表示在类接口中是可见的
有许多类要生成。这样一种类层次结构说明你必须将一个对象分解成两个部分。Rumbaugh 称这种类层次结构为“嵌套的普化”(nested generalizations )。
5.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。一个简单的例子便是Coplien 的String 类[ C o p 9 2 ],在这个类中多个对象可以共享同一个字符串表示(S t r i n g R e p )。
二.参与者
1.Abstraction
定义抽象类的接口。
维护一个指向Implementor类型对象的指针。
2.RefinedAbstraction
扩充由Abstraction定义的接口。
3.Implementor
定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。
事实上这两个接口可以完全不同。
一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
4.ConcreteImplementor
实现Implementor接口并定义它的具体实现。
三.实例
package com.zoey.designPattern.Bridge;public abstract class WardrobeMaker { abstract public void produce();}
package com.zoey.designPattern.Bridge;/* * 衣柜 */public abstract class Wardrobe { //衣柜厂商 protected WardrobeMaker wardrobeMaker; //放置衣物 abstract public void placeClothing(WardrobeMaker wardrobeMaker);}
package com.zoey.designPattern.Bridge;public class BigMaker extends WardrobeMaker { public BigMaker(){ System.out.println("big厂商"); } @Override public void produce() { System.out.println("big厂商"); }}
package com.zoey.designPattern.Bridge;public class BigWardrobe extends Wardrobe { @Override public void placeClothing(WardrobeMaker wardrobeMaker) { System.out.println("一个big衣柜"); }}
package com.zoey.designPattern.Bridge;public class SmallMarker extends WardrobeMaker { public SmallMarker(){ System.out.println("small厂商"); } @Override public void produce() { System.out.println("small厂商"); }}
package com.zoey.designPattern.Bridge;public class SmallWardrobe extends Wardrobe { @Override public void placeClothing(WardrobeMaker wardrobeMaker) { System.out.println("一个small衣柜"); }}
package com.zoey.designPattern.Bridge;public class Test { public static void main(String[] args) { BigWardrobe bw = new BigWardrobe(); bw.placeClothing(new BigMaker()); SmallWardrobe sw = new SmallWardrobe(); sw.placeClothing(new SmallMarker()); }}
结果:
big厂商一个big衣柜small厂商一个small衣柜
形象比喻:摘自网络
BRIDGE—早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了
桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。
- 设计模式(七):桥接模式Bridge(结构型模式)
- 设计模式--桥接模式Bridge(结构型)
- 设计模式-结构型- 桥接模式(Bridge)
- 七、桥接模式Bridge(结构型)
- 设计模式之(七)--桥接模式(bridge)
- 桥接模式(Bridge )-设计模式(七)
- 设计模式(七)之Bridge - 桥接模式
- 设计模式(十二)桥模式(Bridge)-结构型
- BRIDGE桥接设计模式(结构型)
- 设计模式中结构型模式(二)桥接模式(Bridge)
- 设计模式之桥接模式(Bridge)之三(典型结构图) 结构型模式
- 【结构型模式】桥接模式(Bridge)之23种java设计模式
- Java设计模式之结构型模式-桥接模式(Bridge)
- 结构型:设计模式之桥接模式(七)
- 结构型-桥接模式(Bridge)
- 设计模式:桥接模式(Bridge)
- 设计模式:桥接模式(Bridge)
- 设计模式:桥接模式(Bridge)
- 机器学习中的范数规则化之(一)L0、L1与L2范数
- mysql联表查询语句示例
- SQLite使用
- 面试 腾讯 阿里 百度
- 手把手教你如何快速制作电子书
- 设计模式(七):桥接模式Bridge(结构型模式)
- 真机测试遇到 ——is not paired with your computer
- Bill git常用命令整理
- 机器学习中的范数规则化之(二)核范数与规则项参数选择
- Tomcat发布web项目的几种方式
- 有数Bizhelp帮助文档在线制作软件官方
- UIActivityIndicatorView(指示控制器)
- NSArray API 学习
- postgresql系统表