文档章节

结构型模式之二:桥梁模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:38
字数 454
阅读 100
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

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

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 - 100
Logitech use keyword to set channel.

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

3、桥梁模式在Ecipse 平台中

在Eclipse平台中, 桥梁模式是一个重要的实现

上文章翻译自: http://www.programcreek.com/2011/10/java-design-pattern-bridge/

奋斗到天明
粉丝 19
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
加载中
请先登录后再评论。
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.5K
16
REST/HTTP 工具包--Spray

Spray 是一个开源的 REST/HTTP 工具包和底层网络 IO 包,基于 Scala 和 Akka 构建。轻量级、异步、非堵塞、基于 actor 模式、模块化和可测试是 spray 的特点。 示例代码: val responses: F...

匿名
2013/02/20
7.2K
0
工作流管理系统--Pegasus WMS

Pegasus (飞马座)工作流管理系统包括一套技术标准工作流程应用程序中执行帮助许多不同的环境中,包括桌面、校园集群、网格、云。它弥补了科学领域和执行环境通过自 动映射到分布式资源的高层工...

匿名
2013/02/24
5.5K
0
Swing界面分析和调试工具--Swing Inspector

Swing Inspector是一个Java Swing/AWT用户界面分析和调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swing初级到高级的所有开发人员,能够快速...

匿名
2013/03/06
3.4K
0
C++的JSON解析类--JSONVALUE

Jsonvalue 是 C++ 的 JSON 类,用来解析 JSON 到 C++ 对象,也可将对象转成 JSON 字符串。支持 ANSI 和 Unicode。特点: 严格和松散模式 不同数据类型 简单 API 仅依赖 STL 示例代码: JSON...

匿名
2013/03/10
3K
1

没有更多内容

加载失败,请刷新页面

加载更多

Subversion存储库中“分支”,“标记”和“主干”的含义是什么?

问题: I've seen these words a lot around Subversion (and I guess general repository) discussions. 我已经在Subversion(我猜通用存储库)讨论中看到了很多这样的话。 I have been us......

富含淀粉
今天
5
0
《Java8实战》笔记(03):Lambda表达式

本文源码 Lambda 管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 Lambda表达...

巨輪
今天
7
0
从其他文件夹导入文件 - Importing files from different folder

问题: I have the following folder structure. 我有以下文件夹结构。 application/app/folder/file.py and I want to import some functions from file.py in another Python file which r......

javail
今天
22
0
大数据研发学习之路--Hadoop集群搭建

阅读编译文档 准备一个hadoop源码包,我选择的hadoop版本是:hadoop-2.7.7-src.tar.gz,在hadoop-2.7.7的源码 包的根目录下有一个文档叫做BUILDING.txt,这其中说明了编译hadoop所需要的一些...

DSJ-shitou
今天
8
0
OSChina 周五乱弹 —— 特么是别的公司派来的特洛伊木马吧?

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 小小编辑推荐:《我会守在这里》- 毛不易 《我会守在这里》- 毛不易 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :股市连跪了五天,...

小小编辑
今天
77
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部