关闭

Java的桥接模式

292人阅读 评论(0) 收藏 举报
分类:

转载自:http://www.importnew.com/6857.html

放在这里,主要是方便记忆。侵权立删。

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

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

1、桥接模式的故事

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

2、桥接模式Java示例代码

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

1
2
3
4
5
public interface ITV {
    public void on();
    public void off();
    public void switchChannel(int channel);
}

实现三星的 ITV 接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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的引用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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);
    }
}

定义遥控器的具体类。

1
2
3
4
5
6
7
8
9
10
11
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.");
    }
}
1
2
3
4
5
6
7
public class Main {
    public static void main(String[] args){
        ITV tv = new SonyTV();
        LogitechRemoteControl lrc = new LogitechRemoteControl(tv);
        lrc.setChannelKeyboard(100);   
    }
}

输出如下:

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

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28110次
    • 积分:551
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:46篇
    • 译文:0篇
    • 评论:14条
    文章分类
    最新评论