java设计模式---Bridge Pattern---桥接模式

本文详细解释了桥接模式的概念及其在区分功能类层次与实现类层次中的作用。通过展示如何在不修改实现类层次的情况下,仅通过添加功能类来扩展功能,本文进一步说明了桥接模式的灵活性和实用性。

桥接模式的最大特征就在区分成“功能的类层次”和“实现的类层次”。如果想新增功能的话,就在功能的类层次追加类。这时候不需要修改实现的类层次,新增加的功能利用接口定义的实现功能来组合实现。

如上图:左边部分是功能层次类,右边部分是实现层次类。它们通过变量impl来实现桥接。

对于添加不同的功能,如类似CountDisplay的功能,只需要添加**Display功能类。个人认为这里功能的添加是在Display类中方法不变就能提供足够功能的情况下完成的。否则就需要修改Display,响应的也需要在DiplayImpl里对功能进行扩充。

//Display类

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(); display(); } }
//DisplayImpl类

public abstract class DisplayImpl { public abstract void rawOpen(); public abstract void rawPrint(); public abstract void rawClose(); }
//CountDisplay类

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(); } } //StringDisplay类

public class StringDisplayImpl extends DisplayImpl { private String string; private int width; public StringDisplayImpl(String string) { this.string = string; this.width = string.getBytes().length; } public void rawOpen() { printLine(); } private void printLine() { System.out.println("+"); for(int i = 0;i<2;i++) { System.out.println("-"); } System.out.println("+"); } @Override public void rawPrint() { System.out.println("|"+string+"|"); } @Override public void rawClose() { printLine(); } }
//Bridge测试类

public class Bridge { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Display d1 = new Display(new StringDisplayImpl("hello world")); CountDisplay d2 = new CountDisplay(new StringDisplayImpl("hello daniel")); d1.display(); d2.multiDisplay(3); } }

通常,扩充类时可以通过继承来实现,不过继承让子类和父类的关系牢不可分。如果根据需要修改类之间的关系,继承就不可行了。

桥接模式通过变量impl这种方式来把任务“委托”给实现类(接口),这样就变得灵活可操控。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值