文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:38
字数 454
阅读 27
收藏 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
0
创建型、结构型、行为型模式(1)

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

晨曦之光
2012/04/24
226
0
设计模式总结(二)

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

邵鸿鑫
2014/05/02
0
0
Java进阶篇设计模式之四 -----适配器模式和桥接模式

前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式。本篇则来学习下结构型模式的适配器模式和桥接模式。 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的...

虚无境
08/22
0
0
Java设计模式学习记录-桥接模式

前言 这次介绍结构型设计模式中的第二种模式,桥接模式。 使用桥接模式的目的就是为了解耦,松散的耦合更利于扩展,但是会增加相应的代码量和设计难度。 桥接模式 桥接模式是为了将抽象化与实...

纪莫
07/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

storm 环境搭建

1.下载解压 下载地址:http://storm.apache.org/downloads.html

MrPei
11分钟前
0
0
Python Base - 读写文件,字符串拼接,单引号

字符转义 读写文件cvs 字符串拼接,替换 import csvcsv_file_name = 'cardbin.csv'# insert into `card_bin_code` (name_of, code_of, card_no_prefix, bank_code) values ('中国银行......

园领T
12分钟前
0
0
基于JQUERY BOOTSTRAP 最简单的loading遮罩层

<%--loading遮罩层--%><div class="modal fade" id="loadingModal" backdrop="static" keyboard="false">   <div style="width: 200px;height:20px; z-index: 20000; position: abs......

颖辉小居
13分钟前
0
0
springboot+kafka

1,首先springboot对kafka的支持也很好,同样是在配置文件中配置好参数,然后就可以直接使用。先说一下,很简单,,,不要怕 2,我用的依赖是 <dependency> <groupId>org.springframewor...

我真是小菜鸡
17分钟前
2
0
webservice动态客户端自我记录备份(spring boot)

动态客户端相比直接调用webservice的客户端代码要简单很多,但实际上很多工作是java自己替我们做掉了。简单记录一下内容,以备后续使用: pom文件只需要引入: <!-- CXF webservice --><de...

checkboxMan
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部