开发者社区> 悟静> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

讲故事,学(Java)设计模式—桥接模式

简介: 讲故事,学(Java)设计模式—桥接模式 2013/11/09 | 分类: 基础技术 | 0 条评论 | 标签: Java, 设计模式 分享到:12 本文由 ImportNew - 陈雅峰 翻译自 programcreek。
+关注继续查看


讲故事,学(Java)设计模式—桥接模式

本文由 @胡试之 校稿。如果你也希望参与类似的系列文章翻译,可以加入我们的Java开发技术翻译 小组。

简单来讲,桥接模式是一个两层的抽象。

桥接模式是用于“把抽象和实现分开,这样它们就能独立变化”。 桥接模式使用了封装、聚合,可以用继承将不同的功能拆分为不同的类。

1、桥接模式的故事

电视和遥控器(图中有错字)是一个完美展示两层抽象的例子。你有一个电视机的接口,还有一个遥控器的抽象类。我们都知道,将它们中任何一个定义为一个具体类都不是好办法,因为其它厂家会有不同的实现方法。

2、桥接模式Java示例代码

首先定义电视机的接口:ITV

1
2
3
4
5
public interface ITV {
    public void on();
    public void off();
    public void switchChannel(int channel);
}

实现三星的 ITV 接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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的引用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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);
    }
}

定义遥控器的具体类。

1
2
3
4
5
6
7
8
9
10
11
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.");
    }
}
1
2
3
4
5
6
7
public class Main {
    public static void main(String[] args){
        ITV tv = new SonyTV();
        LogitechRemoteControl lrc = new LogitechRemoteControl(tv);
        lrc.setChannelKeyboard(100);   
    }
}

输出如下:

1
2
Sony: channel – 100
Logitech use keyword to set channel.

总结一下, 桥接模式允许两层实现的抽象,上面的电视机和遥控器就是很好的例子。可见,桥接模式提供了更多的灵活性。

3、Eclipse 平台上的桥接模式

在Eclipse 架构使用的模式中,桥接模式占有重要的地位。

参考文献

  1.  Gamma, E, Helm, R, Johnson, R, Vlissides, J著: Design Patterns, 第151页. Addison-Wesley出版社, 1995
  2.  维基百科中的Bridge Pattern条目



原文链接: programcreek 翻译: ImportNew.com - 陈雅峰
译文链接: http://www.importnew.com/6857.html
[ 转载请保留原文出处、译者和译文链接。]

12


关于作者: 陈雅峰

(新浪微博:@Alex--snail


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java设计模式-外观模式
Java设计模式-外观模式
24 0
Java设计模式-享元模式
Java设计模式-享元模式
33 0
【Java设计模式】——原型模式
用一个已经创建出来的实例对象作为原型,复制出一个与原型相同的新对象。(类似于 一气化三清)。原型模式中的克隆分为浅拷贝和深拷贝 浅拷贝:创建出的新对象的属性和原来对象完全相同,对于非基本类型属性,其内存地址仍指向原来对象所指向的内存地址 深拷贝:创建出的新对象属性及属性中引用的其他对象也会被克隆,不再指向原有内存地址
20 0
JAVA设计模式——【原型模式】
JAVA设计模式——【原型模式】
38 0
java的桥接模式
http://blog.csdn.net/jason0539/article/details/22568865 http://www.cnblogs.com/V1haoge/p/6497919.html http://blog.
721 0
Java设计模式--外观模式
外观模式 为系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 Facade Pattern Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface t
1330 0
Java设计模式--原型模式
原型模式 用原型实例制定创建对象的种类,并且通过复制这些原型创建新的对象。 Prototype Pattern Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. 类图
1200 0
JAVA 设计模式 迭代器模式
用途 迭代器模式 (Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 迭代器模式是一种行为型模式。   结构 图-迭代器模式结构图 Iterator : 定义访问元素的接口。
610 0
+关注
悟静
从事软件行业近二十年
690
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载