1、birdge(桥接)
(1)意图
将抽象类与实现部门分离,使他们都可以独立变化
(2)结构
Abstraction定一个抽象类接口,维护一个指向Implementor指针。
RefineAbstraction扩充Abstraction定义的接口。
Implementor定一个实现类的接口,该接口不一定要与Abstraction接口完全一致,事实上这两个接口可以完全不同,一般来说,Implementor指接口仅仅提供基本操作而Abstraction定义基于这些操作的较高层次的操作
ConcreteImplementor实现Implementor接口并定义她具体实现
(3) 适用性
1、不希望抽象和她的实现部分之间有一个固定的绑定关系。
2、类的抽象以及她的实现都可以通过生成子类的方法加以扩充。
3、多一个抽象的实现部分的修改应对客户不产生影响
4、c++想对客户完全隐藏抽象实现部分
5、有许多类要生成类层次结构
2、根据UMl类图编写代码
通过对UML图的理解,Abstraction和Implementor是两个独立的类,各做个的工作。在Abstraction中通过关联(特殊关联聚合)的方式,设置一个指向Implementor的指针,对Implementor类所有的方法和进行掌握和了解,在RefineAbstraction类中根据Implementor的指针,对Abstraction中的方法进行扩充。
举例:Abstraction类是一个开面点的老板,RefineAbstraction是这个老板的一个面店,老板只负责把面粉买回来,具体的工作通过老板权力(imp)交由职工(Implementor)来完成,具体的工作由不同的面点师( ConcreteImplementor )来做,老板通过Operation()方法让面点师开始干活,面点师则根据自己的分工做出不同的面食比如包子和饺子。
3、代码编写
输出结果:
./a.out
老板把面回来了,张三用来包饺子
老板把面回来了,李四用来做包子
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!