(文章翻译自Java Design Pattern: Bridge)

简单来说,桥梁设计模式是一个两层的抽象。

桥接模式就是从一个抽象中实现中解耦以便两个都可以独立的改变。桥接使用封装聚合而且使用继承将职责分配到不同的类中。

1.桥接的来历

下面TV和远程控制的例子能够演示两层的抽象。你可以有一个针对TV的接口而且一有个对于远程控制的抽象类。你知道的,这不是一个好的做法去针对他们的每一个的具体类,因为其他的(vendors )供应商能够提供不同的实现。

2.桥接模式Java代码

首先定义TV接口:ITV

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

让三星实现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);
}
}

让索尼实现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 class Main {
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.

总结的说,在这个场景中,桥接模式允许TV和远程控制的双层的抽象实现。因此,它给了更加的灵活性。

3.Eclipse平台的桥接模式

桥接模式是一个使用在Eclipse架构中重要的模式。

引用:

  1. Gamma, E, Helm, R, Johnson, R, Vlissides, J: Design Patterns, page 151. Addison-Wesley, 1995
  2. Wiki Bridge Pattern

[译]Java 设计模式之桥接的更多相关文章

  1. java设计模式7——桥接模式

    java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...

  2. [译]Java 设计模式之单例

    (文章翻译自Java Design Pattern: Singleton) 单例是在Java最经常被用到的设计模式.它通过阻止其他的实例化和修改来用于控制创建对象的数目.这一特性可应用于那些当只有一个 ...

  3. [译]Java 设计模式之装饰器

    (文章翻译自Java Design Pattern: Decorator – Decorate your girlfriend) 1.装饰模式的来历 让我们假设你在寻找一个女朋友.有来自像没美国中国日 ...

  4. [译]Java 设计模式 之模板方法

    (文章翻译自Java Design Pattern: Template Method) 模板方法设计模式定义了归档特定操作的工作流.它允许子类去修改特定的步奏而不用改变工作流的结构. 下面的例子表示模 ...

  5. [译]Java 设计模式之工厂

    (文章翻译自Java Design Pattern: Factory) 1.Java工厂模式的来历 工厂设计模式用于创建基于不同参数的对象.下面的例子就是在一个工厂里创建一个人.如果我们向工厂要一个b ...

  6. [译]Java 设计模式之外观

    (文章翻译自Java Design Pattern: Facade) 外观设计模式隐藏了任务的复杂性而只是提供了一个简单的接口.一个非常好的例子就是计算机的启动.当一个计算机启动的时候,它涉及CUP. ...

  7. [译]Java 设计模式之命令

    (文章翻译自Java Design Pattern: Command) 命令设计模式在进行执行和记录的时候需要一个操作及其参数和封装在一个对象里面.在下面的例子中,命令是一个操作,它的参数是一个Com ...

  8. [译]Java 设计模式之中介者

    (文章翻译自Java Design Pattern: Mediator) 中介者设计模式被用于一组的同事进行协作.这些同事不彼此进行直接的交流联系,但是是通过中介者. 在下面的例子中,A同事想去说话, ...

  9. [译]Java 设计模式之备忘录

    (文章翻译来自Java Design Pattern: Memento) memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态. 在将来时空旅行将成为显示 ...

随机推荐

  1. java处理Excel文件---excel文件的创建,删除,写入,读取

    这篇文章的代码是我封装的excel处理类,包含推断excel是否存在,表格索引是否存在,创建excel文件,删除excel文件,往excel中写入信息,从excel中读取数据. 尤其在写入与读取两个方 ...

  2. java 正则表达式提取html纯文本

    本文来自我的个人博客: java 正则表达式提取html纯文本 做内容的大家都知道,从html中直接提取纯文本是一个非常大的问题.现将我做的正则匹配贴上: import java.util.regex ...

  3. 体验安装金蝶K/3 Wise 13.0(图像)

    金蝶13.0它提供windows7支持,而数据库也升级到SQL server 2008,有许多功能上的改善和增强.原本在位置低版本号需要时间来管理此功能,因为有这个模块没有原因一直没能起来,现在,新版 ...

  4. hdu4699 Editor 2013 多校训练第十场 D题 数列维护 splay | 线段树 | 栈!!!!!

    题意:维护一个文本编辑,并且查询最大前缀和. 写了splay,wa了13次 过了之后觉着特傻逼.发现题解两个栈就可以了,光标前后维护两个栈,维护前面的栈的前缀和 和 最大前缀和. 哎,傻逼,太弱了,还 ...

  5. 3.Chrome数据同步服务分析--server一片

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVlcjE2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  6. i++与++i哪个效率更高

    简单的比较前缀自增运算符和后缀自增运算符的效率是片面的, 因为存在很多因素影响这个问题的答案. 首先考虑内建数据类型的情况: 如果自增运算表达式的结果没有被使用, 而是仅仅简单地用于增加一元操作数, ...

  7. swift UI特殊培训38 与滚动码ScrollView

    有时我们适合页面的全部内容,我们需要使用ScrollView,额外的内容打通滚动. 什么样的宽度和高度首先,定义,健身器材轻松. let pageWidth = 320 let pageHeight ...

  8. [MFC]获取一些用户文件夹

    (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请注明出处) 在window7中.进入命令行cmd模式,输入set到多个系统文件夹定义: 比如: Wi ...

  9. RSA加密解密(PHP Demo)

    $private_key = '-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDpoODVtnSztGyb//p+g/Ob36jb3jzWzS2qovOj ...

  10. Oracle中使用Entity Framework 6.x Code-First

    Oracle中使用Entity Framework 6.x Code-First方式开发 去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下O ...