博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构型模式之二:桥梁模式
阅读量:6084 次
发布时间:2019-06-20

本文共 1949 字,大约阅读时间需要 6 分钟。

  hot3.png

简单来说,桥梁模式是两层的抽象化。 桥梁模式的意思是从具体的实现中抽象出来,使两个都能很独立。桥梁模式使用封装,聚合,并能使用继承去分离职责给不同的类。

1、 桥梁模式的故事

一个例子是电视机与遥控器,能演示两层的抽象化,你有电视机的接口与遥控器的抽象类,如你所知,给他们创建实体类不是一个好的主意,因为不同的厂商可能有不同的实现。

2、桥梁模式的Java代码

首先定义TV的接口:ITV

public interface ITV {  public void on();  public void off();  public void switchChannel(int channel);}

让 Samsung 实现 ITV接口:

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);  }}

让Sony实现 ITV接口

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的引用

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);  }}

定义一个具体的遥控器类:

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.");  }}
public static void main(String[] args){    ITV tv = new SonyTV();    LogitechRemoteControl lrc = new LogitechRemoteControl(tv);    lrc.setChannelKeyboard(100);    }}

输出:

Sony: channel - 100Logitech use keyword to set channel.

总之:桥梁模式允许两层抽象的实现,在例子中电视机与遥控器,因此,他具有更高的灵活性。

3、桥梁模式在Ecipse 平台中

在Eclipse平台中, 以

上文章翻译自:

转载于:https://my.oschina.net/markho/blog/498177

你可能感兴趣的文章
通用权限管理设计 之 数据库结构设计
查看>>
MYSQL服务器my.cnf配置文档详解
查看>>
springboot-2-springboot的文件上传和下载
查看>>
TPYBoardv201:带以太网的MicroPython开发板
查看>>
Micropython实战之TPYBoardv102 DIY金属检测仪
查看>>
ssh免密连接互信认证
查看>>
ElasticSearch使用
查看>>
使用grep、awk统计查询日志
查看>>
Spring 5 core 中的 @NonNull 是个什么鬼?!
查看>>
vsftpd系列--2--匿名访问控制
查看>>
Excel工作表保护破解方法
查看>>
实现geo相关
查看>>
SSM项目搭建三(终)
查看>>
vmware esxi基础篇之模版与克隆
查看>>
拥抱 Gradle: 下一代自动化工具
查看>>
CyclicBarrier让多线程齐步走
查看>>
tomcat与web程序结构与Http协议与HttpUrlConnection
查看>>
PHPStorm下调试使用CURL抓取数据中文乱码的一种可能
查看>>
解决hadoop namenode -format / hdfs namenode -format 找不到java的文件目录
查看>>
springMVC 几种页面跳转方式
查看>>