Bridge Pattern(桥接模式)

解决的问题

开发一个电视机遥控器app,要求可以适配各种的电视机品牌(Sony、Samsung等)。遥控器分为基础版和高级版,基础版只能开关机,高级版可以切换频道。
可以这样设计:


普通方法.png

这样设计很好,有很好的拓展性,将来可以支持拓展更多的电视机品牌(XiaoMi、Huawei等),也可以支持拓展更多遥控器版本(例如,电影版,VIP版等)。
但是随着拓展越来越多,创建的类也会越来越多。这种情况,可以考虑使用Bridge Pattern(桥接模式)优化代码:


使用桥接模式.png

其实上面两种方式都可以,但是用桥接模式,代码会精简得多。

代码

Device:

package com.cong.designpattern.bridge;

public interface Device {
    public void trunOn();
    public void trunOff();
    public void setChannel(Number channel);
}

SonyDevice:

package com.cong.designpattern.bridge;

public class SonyDevice implements Device{
    @Override
    public void trunOn() {
        System.out.println("Trun on");
    }
    @Override
    public void trunOff() {
        System.out.println("Trun off");
    }
    @Override
    public void setChannel(Number channel) {
        System.out.println("Set channel to " + channel);
    }
}

RemoteControl:

package com.cong.designpattern.bridge;

public class RemoteControl {
    protected Device device;
    public RemoteControl(Device device) {
        this.device = device;
    }
    public void trunOn() {
        device.trunOn();
    }
    public void trunOff() {
        device.trunOff();
    }
}

AdvancedRemoteControl:

package com.cong.designpattern.bridge;

public class AdvancedRemoteControl extends RemoteControl {
    public AdvancedRemoteControl(Device device) {
        super(device);
    }
    public void setChannel(Number channel) {
        device.setChannel(channel);
    }
}

Test code:

SonyDevice sonyDevice = new SonyDevice();

RemoteControl  sonyRemoteControl = new RemoteControl(sonyDevice);
sonyRemoteControl.trunOn();
sonyRemoteControl.trunOff();

AdvancedRemoteControl sonyAdvancedRemoteControl = new AdvancedRemoteControl(sonyDevice);
sonyAdvancedRemoteControl.setChannel(1);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 桥接模式:使用桥接模式不只改变你的实现,也改变你的抽象。 桥接模式是将抽象和实现分离,使他们能够各自独立的变化。 ...
    iOS_学渣阅读 163评论 0 0
  • 桥接模式,桥梁模式 意图:将抽象和实现解耦,让它们可以独立变化。 桥接模式基于类的最小设计原则,通过使用封装、聚合...
    long弟弟阅读 307评论 0 0
  • 引言 在项目开发中,我们会遇到这样的一种场景:某些类型由于自身的逻辑,往往具有两个或多个维度的变化,比如说大话设计...
    泥孩儿0107阅读 397评论 0 0
  • 桥接模式(Bridge Patten)::桥接模式是在类的抽象化和实现化之间搭建桥梁,来实现二者的解耦。。这种类型...
    涅槃快乐是金阅读 418评论 0 0
  • 15 Bridge Pattern(桥接模式) 前言:把实现分开,让它们各自变化需求:麦当当和肯打基是Vander...
    Vander1991阅读 334评论 0 1