桥接模式

桥接模式不仅改变实现,也改变抽象

java类图

这里写图片描述

java代码

// 实现层次,电视机接口
public interface TV {

    void on();

    void off();

    void tuneChannel(int channel);

    int getChannel();
}

// 索尼电视机
public class SonyTV implements TV {

    private int channel = 1;

    @Override
    public void on() {
        System.out.println("Sony TV turn on");
    }

    @Override
    public void off() {
        System.out.println("Sony TV turn off");
    }

    @Override
    public void tuneChannel(int channel) {
        System.out.println("channel = " + channel);
        this.channel = channel;
    }

    @Override
    public int getChannel() {
        return channel;
    }

}

// 三星电视机
public class SamsungTV implements TV {

    private int channel = 1;

    @Override
    public void on() {
        System.out.println("Samsung TV turn on");
    }

    @Override
    public void off() {
        System.out.println("Samsung TV turn off");
    }

    @Override
    public void tuneChannel(int channel) {
        System.out.println("channel = " + channel);
        this.channel = channel;
    }

    @Override
    public int getChannel() {
        return channel;
    }

}

// 抽象层次,可以是接口也可以是抽象类
public abstract class RemoteControl {

    protected TV tv;

    public RemoteControl(TV tv) {
        this.tv = tv;
    }

    public void on() {
        tv.on();
    }

    public void off() {
        tv.off();
    }

    public void tuneChannel(int channel) {
        tv.tuneChannel(channel);
    }
}


// 其中一个控制器实现
public class FirstRemoteControl extends RemoteControl {

    public FirstRemoteControl(TV tv) {
        super(tv);
    }

    public void addChannel() {
        tuneChannel(tv.getChannel() + 1);
    }
}

// 测试类
public class Test {

    public static void main(String[] args) {
        new Test().test();
    }

    private void test() {
        FirstRemoteControl control = new FirstRemoteControl(new SonyTV());
        control.on();
        control.tuneChannel(10);
        control.addChannel();
        control.off();
    }
}

注:

  1. 桥接模式和策略模式很接近,桥接模式不仅改变实现,也改变抽象;策略模式只能改变算法实现。
  2. 将实现予以解耦,让它和界面直接不在永久绑定。
  3. 抽象和实现可以对独立扩展,不会影响到对方。
  4. 对于“具体抽象类”所做的改变,不会影响到客户。
  5. 适合使用在需要跨越多个平台的图形和窗口系统上。
  6. 当需要用不同的方式改变接口和实现时,你会发现桥接模式很好用。
  7. 桥接模式的缺点是增加了复杂度。

参考文章
Head First 设计模式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值