美文网首页
桥接模式

桥接模式

作者: 阳光的技术小栈 | 来源:发表于2018-01-22 15:13 被阅读6次

使用桥接模式不只改变你的实现,也改变你的抽象。

示例—遥控器

有很多遥控器,可以控制不同的电视。实现遥控器与电视之间的关系和配合过程。遥控器的设置频道方法最终由不同的电视实现类去实现。

UML图表示

桥接模式-遥控器

代码演示

电视接口

package Bridge;

public interface TV {
    void on();
    void off();
    void tuneChannel(int channel);
}

RCA电视类

package Bridge;

public class RCA implements TV {
    @Override
    public void on() {
        System.out.println("RCA TV open");
    }

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

    @Override
    public void tuneChannel(int channel) {
        System.out.println("RCA TV is tuned to No." + channel + " Channel");
    }
}

SONY电视类

package Bridge;

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

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

    @Override
    public void tuneChannel(int channel) {
        System.out.println("Sony TV is tuned to No." + channel + " Channel");
    }
}

遥控器抽象类

package Bridge;

public abstract class RemoteControl {

    TV implementor;

    RemoteControl(TV implementor){
        this.implementor = implementor;
    }

    void on(){
        this.implementor.on();
    }

    void off(){
        this.implementor.off();
    }

    void setChannel(int channel){
        implementor.tuneChannel(channel);
    }

}

RCA遥控器类

package Bridge;

public class RCAControl extends RemoteControl {

    int currentStation = 0;

    RCAControl(TV implementor) {
        super(implementor);
    }

    void setStation(){

    }

    void nextChannel() {
        setChannel(++currentStation);
    }

    void previousChannel() {
        setChannel(currentStation - 1 < 0 ? 0 : --currentStation);
    }


}

SONY遥控器类

package Bridge;

public class SonyControl extends RemoteControl {

    int currentStation = 0;

    SonyControl(TV implementor) {
        super(implementor);
    }

    void setStation(){

    }

    void nextChannel() {
        setChannel(currentStation + 1);
    }

    void previousChannel() {
        setChannel(currentStation - 1 < 0 ? 0 : currentStation - 1);
    }
}

测试代码

package Bridge;

public class ControlTVDriver {
    public static void main(String[] args) {

        RCAControl rcaControl = new RCAControl(new RCA());
        SonyControl sonyControl = new SonyControl(new Sony());

        rcaControl.on();
        rcaControl.nextChannel();
        rcaControl.nextChannel();
        rcaControl.previousChannel();
        rcaControl.off();

        sonyControl.on();
        sonyControl.nextChannel();
        sonyControl.previousChannel();
        sonyControl.previousChannel();
        sonyControl.off();

    }
}

测试结果

RCA TV open
RCA TV is tuned to No.1 Channel
RCA TV is tuned to No.2 Channel
RCA TV is tuned to No.1 Channel
RCA TV close
Sony TV open
Sony TV is tuned to No.1 Channel
Sony TV is tuned to No.0 Channel
Sony TV is tuned to No.0 Channel
Sony TV close

相关文章

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 结构型模式:桥接模式

    文章首发:结构型模式:桥接模式 七大结构型模式之二:桥接模式。 简介 姓名 :桥接模式 英文名 :Bridge P...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • 06-01-001 虚拟机的网络连接方式(转运整理)

    一、Bridged(桥接模式) 什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥...

  • 桥接模式与中介模式

    桥接模式-BRIDGE 对桥接模式感兴趣,是因为公司业务上需要桥接Html5和ReactNative两个平台。桥接...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 桥接模式

    个人博客http://www.milovetingting.cn 桥接模式 模式介绍 桥接模式也称为桥梁模式,是结...

  • 桥接模式

    桥接模式 参考原文: https://zhuanlan.zhihu.com/p/62390221 定义 桥接模式 ...

  • 10-桥接模式

    桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】 处理多维度变化——桥接模式(...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

网友评论

      本文标题:桥接模式

      本文链接:https://www.haomeiwen.com/subject/hkranxtx.html