java 设计模式--桥接模式

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

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

1、桥接模式的故事

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

2、桥接模式Java示例代码

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

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

实现三星的 ITV 接口。

1 public class SamsungTV implements ITV {
2     @Override
3     public void on() {
4         System.out.println("Samsung is turned on.");
5     }
6 
7     @Override
8     public void off() {
9         System.out.println("Samsung is turned off.");
10     }
11 
12     @Override
13     public void switchChannel(int channel) {
14         System.out.println("Samsung: channel - " + channel);
15     }
16}

再实现索尼的ITV接口。

1 public class SonyTV implements ITV {
2 
3     @Override
4     public void on() {
5         System.out.println("Sony is turned on.");
6     }
7 
8     @Override
9     public void off() {
10         System.out.println("Sony is turned off.");
11     }
12 
13     @Override
14     public void switchChannel(int channel) {
15         System.out.println("Sony: channel - " + channel);
16     }
17}

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

1 public abstract class AbstractRemoteControl {
2     /**
3      * @uml.property  name="tv"
4      * @uml.associationEnd 
5      */
6     private ITV tv;
7 
8     public AbstractRemoteControl(ITV tv){
9         this.tv = tv;
10     }
11 
12     public void turnOn(){
13         tv.on();
14     }
15 
16     public void turnOff(){
17         tv.off();
18     }
19 
20     public void setChannel(int channel){
21         tv.switchChannel(channel);
22     }
23}

定义遥控器的具体类。

1 public class LogitechRemoteControl extends AbstractRemoteControl {
2 
3     public LogitechRemoteControl(ITV tv) {
4         super(tv);
5     }
6 
7     public void setChannelKeyboard(int channel){
8         setChannel(channel);
9         System.out.println("Logitech use keyword to set channel.");
10     }
11}
1 public class Main {
2     public static void main(String[] args){
3         ITV tv = new SonyTV();
4         LogitechRemoteControl lrc = new LogitechRemoteControl(tv);
5         lrc.setChannelKeyboard(100);   
6     }
7}

输出如下:

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

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

3、Eclipse 平台上的桥接模式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值