文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:38
字数 454
阅读 21
收藏 0
点赞 0
评论 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/

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
剑指Offer——知识点储备-设计模式

剑指Offer——知识点储备-设计模式 设计模式 设计模式的六大原则 (1)单一职责原则(有且仅有一个原因引起类的变化); (2)里氏替换(任何父类出现的地方子类都可以替换); (3)依赖倒置...

sunhuaqiang1 ⋅ 2016/11/07 ⋅ 0

创建型、结构型、行为型模式(1)

目的 创建型模式 Creational Pattern 结构型模式 Structural Patterns 行为型模式 Behavioral Pattern 概念 创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何...

晨曦之光 ⋅ 2012/04/24 ⋅ 0

设计模式总结(二)

设计模式可分为三种:创建型设计模式,结构型设计模式和行为型设计模式。 一、创建型设计模式 在设计模式中,创建型设计模式处理对象创建过程的设计模式,它根据实际情况来决定具体怎样创建对...

邵鸿鑫 ⋅ 2014/05/02 ⋅ 0

GOF设计模式分类

  GoF模式的分类   1.根据目的准则分类     就是说,指定的模式用来完成什么样的工作。可分为三种:     (1) Creational (创建型):与对象创建有关。     (2) Structural (结...

forest13 ⋅ 2013/09/21 ⋅ 0

PHP设计模式(二):结构模式

上一篇我们介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,现在我们继续来给大家介绍结构型模式。(我的分享里面有) 一、什么是结构型模式? 结构...

juhenj ⋅ 2014/05/15 ⋅ 1

适配器模式——结构型模式

思路: 一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)。都支持Draw()函数,即可以通过Draw()函数绘制图形。我们应该如何做呢? 那么现在,为了加快项...

落叶-归根 ⋅ 2016/05/26 ⋅ 0

设计模式 之桥接模式

之前说过的翻译计划食言了。现在开始翻,从 结构型设计模式 桥接模式开始,因为之前的都在github上写过了(稍后记得整理下)。 现在主流的设计模式主要分三大类 创建型设计模式,结构型设计模...

起什么name呢 ⋅ 2016/05/05 ⋅ 0

PHP的23种设计模式--php_design_patterns

学习理解设计模式,记录PHP关于23种设计模式的简单Demo。 设计模式分为:创建型模式, 结构型模式,行为型模式等23种设计模式。 一、五种创建型模式如下: 工厂方法模式factorymethod 抽象工...

匿名 ⋅ 2016/04/13 ⋅ 1

一天一种设计模式之二-----备忘录模式

一.备忘录模式 备忘录模式属于三种设计模式中的行为型模式(另外两种是创建型模式和结构型模式)。 定义:在不破坏封闭性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这...

tongqu ⋅ 2016/03/07 ⋅ 0

第一章,思想为源.设计模式的概述及分类

一,设计模式概述 关于模式这一概念, 最早出现在城市建筑领域 Christopher Alexander 的一本关于建筑的书(The Timeless Way of Building)。他在书中明确给出了模式的概念: 每一个模式描述了一...

水门-kay ⋅ 2016/07/23 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot整合模板引擎thymeleaf

项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId......

yysue ⋅ 14分钟前 ⋅ 0

ConstraintLayout使用解析

AndroidStudio3.0创建Project默认的布局就是ConstraintLayout。 AndroidStudio3.0前的可以自己修改,使用ConstraintLayout。 为了要使用ConstraintLayout,我们需要在app/build.gradle文件中...

_OUTMAN_ ⋅ 25分钟前 ⋅ 0

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 59分钟前 ⋅ 9

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 今天 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部