标签:pre 结合 抽象工厂 并且 idg 回顾 成员方法 override adapter
一、概念准备
在理解桥接模式之前,先要理解面向对象程序设计中的两个概念:
二、模式说明
如果类的设计都只有一层(程序中自定义的类不存在继承关系),这时候类的功能层次结构和实现层次结构是混杂在一起的,也很难扩展(无法确定应该继承哪个类来扩展功能,同一个方法如果想替换其实现也无法做到)。因此需要按照上面说的,将类的功能层次和实现层次分开,为了在分开后能继续保持一定的联系,这时候就需要一个桥梁,将它们连接起来。(Bridge也有桥梁的意思,连接两个事物)
三、代码示例
在下面的桥接模式代码示例中,着重关注哪些时功能层次,哪些是实现层次,二者又是如何桥接起来的。
1、类的功能层次结构
Display类:Display类的功能是抽象的,负责“显示”一些东西,它位于功能层次结构的最上层。open、print、close这三个方法是Display类提供的接口,它们定义了显示的步骤,这三个方法调用的是Display实现类的对象。
package com.designpattern.cn.bridgepattern; public class Display { private DisplayImpl impl; public Display(DisplayImpl impl){ this.impl = impl; } public void open(){ impl.rawOpen(); } public void print(){ impl.rawPrint(); } public void close(){ impl.rawClose(); } public final void display(){ open(); print(); close(); } }
CountDisplay类:CountDisplay类在Display类的基础上增加了一个新功能,具有“只显示规定次数”的功能。因此,这属于“类的功能层次范畴”。
package com.designpattern.cn.bridgepattern; public class CountDisplay extends Display { public CountDisplay(DisplayImpl impl){ super(impl); } public void multiDisplay(int times){ open(); for(int i=0; i < times; i++){ print(); } close(); } }
2、类的实现层次结构
DisplayImpl类:位于“类的实现层次结构”的最上层。DisplayImpl是抽象类,声明了rawOpen、rawPrint、rawClose三个抽象方法。
package com.designpattern.cn.bridgepattern; public abstract class DisplayImpl { public abstract void rawOpen(); public abstract void rawPrint(); public abstract void rawClose(); }
StringDisplayImpl类:它是仙子字符串的类,但它并不是直接显示字符串,而是继承了DisplayImpl类,作为子类来使用rawOpen、rawPrint、rawClose三个方法显示字符串。
package com.designpattern.cn.bridgepattern; public class StringDisplayImpl extends DisplayImpl { private String string; private int width; public StringDisplayImpl(String string){ this.string = string; this.width = string.getBytes().length; } @Override public void rawOpen(){ printLine(); } @Override public void rawPrint(){ System.out.println("|" + string + "|"); } @Override public void rawClose() { printLine(); } private void printLine(){ System.out.print("+"); for(int i = 0; i < width; i++){ System.out.println("-"); } System.out.println("+"); } }
3、Main类测试结果
四、模式类图
五、模式中的角色
那么,这其中的桥梁Bridge是什么呢?对于示例程序,Display类和DisplayImpl是如何关联的,从程序中看出,这里的桥梁应该是impl字段。
六、相关的设计模式
七、扩展
标签:pre 结合 抽象工厂 并且 idg 回顾 成员方法 override adapter
原文地址:https://www.cnblogs.com/zheng-hong-bo/p/11106278.html