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

ImportNew  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  
分享到:


本文由 ImportNew - 陈雅峰 翻译自 programcreek。如需转载本文,请先参见文章末尾处的转载要求。

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

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

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

1、桥接模式的故事

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

2、桥接模式Java示例代码

首先定义电视机的接口: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.

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

3、Eclipse 平台上的桥接模式

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

参考文献

  1.  Gamma, E, Helm, R, Johnson, R, Vlissides, J著: Design Patterns, 第151页. Addison-Wesley出版社, 1995
  2.  维基百科中的Bridge Pattern条目
-- 扫描加关注,微信号: importnew --

原文链接: programcreek 翻译: ImportNew.com - 陈雅峰
译文链接: http://www.importnew.com/6857.html
[ 转载请保留原文出处、译者、译文链接和上面的微信二维码图片。]



相关文章

  • 讲故事,学(Java)设计模式—原型模式
  • 讲故事,学(Java)设计模式—建造者模式
  • 讲故事,学(Java)设计模式—单例模式
  • 讲故事,学(Java)设计模式—工厂模式
  • 单例模式中为什么用枚举更好
  • Java程序员应该知道的10个面向对象理论
  • 真的吗?Java开发者喜欢编写非Java程序
  • 5本最佳的Java面向对象理论和设计模式的书籍
  • 关于《Java那么健壮,怎么会挂?》的1000条回复
  • JVM并发机制的探讨——内存模型、内存可见性和指令重排序

随意打赏

提交建议
微信扫一扫,分享给好友吧。