Java设计模式:桥接模式
2016-04-05 09:34
453 查看
简单来讲,桥接模式是一个两层的抽象。
1、桥接模式的故事
电视和遥控器(如图)是一个完美展示两层抽象的例子。你有一个电视机的接口,还有一个遥控器的抽象类。我们都知道,将它们中任何一个定义为一个具体类都不是好办法,因为其它厂家会有不同的实现方法。
2、桥接模式Java示例代码
首先定义电视机的接口:ITV
实现三星的 ITV 接口。
再实现索尼的ITV接口。
遥控器要包含对TV的引用。
定义遥控器的具体类。
输出如下:
总结一下, 桥接模式允许两层实现的抽象,上面的电视机和遥控器就是很好的例子。可见,桥接模式提供了更多的灵活性。
桥接模式是用于“把抽象和实现分开,这样它们就能独立变化”。 桥接模式使用了封装、聚合,可以用继承将不同的功能拆分为不同的类。
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.
总结一下, 桥接模式允许两层实现的抽象,上面的电视机和遥控器就是很好的例子。可见,桥接模式提供了更多的灵活性。
相关文章推荐
- spring 事务管理
- 如何在MyEclipse中反编译class文件
- FileReader用法
- Java学习·静态代码块
- 构造方法与非构造方法的比较
- java的一些缓存机制
- springMVC4(12)复杂对象和集合类型入参绑定
- java的System.getProperty()方法可以获取的值
- java运行环境的构建,命令台的基本操作。
- Eclipse下的java工程目录
- java学习二:类
- java中为什么byte的取值范围为-128~127
- Java之I/O流
- 通过反编译看Java String及intern内幕--费元星站长
- java环境变量设置
- Permission denied: win7下面eclipse上传本地文件到DFS && 运行M/R程序时出现的同样的错误解决方法
- spring mvc + mybatis 整合框架
- Java 设计模式 之 单例模式(Singleton)
- JAXB完毕XML与Java对象的互转
- 常用数字签名算法RSA与DSA的Java程序内实现示例