(10)Java设计模式-桥接模式(Bridge)

来源:互联网 发布:珠光色眼影推荐知乎 编辑:程序博客网 时间:2024/05/21 17:54

简单来讲,桥接模式是一个两层的抽象。

桥接模式是用于“把抽象和实现分开,这样它们就能独立变化”。 桥接模式使用了封装、聚合,可以用继承将不同的功能拆分为不同的类。

1、桥接模式的故事

电视和遥控器(图中有错字)是一个完美展示两层抽象的例子。你有一个电视机的接口,还有一个遥控器的抽象类。我们都知道,将它们中任何一个定义为一个具体类都不是好办法,因为其它厂家会有不同的实现方法。
这里写图片描述
2、桥接模式Java示例代码

首先定义电视机的接口:ITV

public interface ITV {    public void on();    public void off();    public void switchChannel(int channel);}

实现三星的 ITV 接口。

public class SamsungTV implements ITV {    @Override    public void on() {        System.out.println("Samsung is turned on.");    }    @Override    public void off() {        System.out.println("Samsung is turned off.");    }    @Override    public void switchChannel(int channel) {        System.out.println("Samsung: channel - " + channel);    }}

再实现索尼的ITV接口。

public class SonyTV implements ITV {    @Override    public void on() {        System.out.println("Sony is turned on.");    }    @Override    public void off() {        System.out.println("Sony is turned off.");    }    @Override    public void switchChannel(int channel) {        System.out.println("Sony: channel - " + channel);    }}

遥控器要包含对TV的引用。

public abstract class AbstractRemoteControl {    /**     * @uml.property  name="tv"     * @uml.associationEnd       */    private ITV tv;    public AbstractRemoteControl(ITV tv){        this.tv = tv;    }    public void turnOn(){        tv.on();    }    public void turnOff(){        tv.off();    }    public void setChannel(int channel){        tv.switchChannel(channel);    }}

定义遥控器的具体类。

public class LogitechRemoteControl extends AbstractRemoteControl {    public LogitechRemoteControl(ITV tv) {        super(tv);    }    public void setChannelKeyboard(int channel){        setChannel(channel);        System.out.println("Logitech use keyword to set channel.");    }}
public class Main {    public static void main(String[] args){        ITV tv = new SonyTV();        LogitechRemoteControl lrc = new LogitechRemoteControl(tv);        lrc.setChannelKeyboard(100);        }}

输出如下:

Sony: channel – 100Logitech use keyword to set channel.

总结一下, 桥接模式允许两层实现的抽象,上面的电视机和遥控器就是很好的例子。可见,桥接模式提供了更多的灵活性。

3、Eclipse 平台上的桥接模式

在Eclipse 架构使用的模式中,桥接模式占有重要的地位。

参考文献

Gamma, E, Helm, R, Johnson, R, Vlissides, J著: Design Patterns, 第151页. Addison-Wesley出版社, 1995
维基百科中的Bridge Pattern条目
原文链接: programcreek 翻译: ImportNew.com - 陈雅峰
译文链接: http://www.importnew.com/6857.html
[ 转载请保留原文出处、译者和译文链接。]

0 0
原创粉丝点击