设计模式之桥接模式
来源:互联网 发布:淘宝可以参加哪些活动 编辑:程序博客网 时间:2024/06/01 08:58
桥接模式
桥接模式是的一种对象结构型模式,它将对象的抽象与实现分离,从而可以独立地改变它们,比如我们在JDBC中用到桥接模式,切换不同类型的数据库,只需要切换不同类型的数据库驱动就可以,而不需要改动太多的代码或者配置。
定义
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
使用场景
- 如果你不希望在抽象和实现部分采用固定的绑定关系,可以采用桥接模式,来把抽象和实现部分分开,然后在程序运行期间来动态的设置抽象部分需要用到的具体的实现,还可以动态切换具体的实现。
- 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时桥接模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
- 如果希望实现部分的修改,不会对客户产生影响,可以采用桥接模式,客户是面向抽象的接口在运行,实现部分的修改,可以独立于抽象部分,也就不会对客户产生影响了,也可以说对客户是透明的。
- 如果采用继承的实现方案,会导致产生很多子类,对于这种情况,可以考虑采用桥接模式,分析功能变化的原因,看看是否能分离成不同的纬度,然后通过桥接模式来分离它们,从而减少子类的数目。
结构
实现
TV接口与具体类的实现
public interface ITV { void on(); void off(); void switchChannel(int channel);}public class SonyTV implements ITV { public void on() { System.out.println("SonyTV has turn on"); } public void off() { System.out.println("SonyTV has turn off"); } public void switchChannel(int channel) { System.out.println("SonyTV switch to channel "+channel); }}public class SamsungTV implements ITV { public void on() { System.out.println("SamsungTV has turn on"); } public void off() { System.out.println("SamsungTV has turn off"); } public void switchChannel(int channel) { System.out.println("SamsungTV switch to channel "+channel); }}
遥控器抽象与具体类的实现
public abstract class AbstractRemoteControl { private ITV tv; public AbstractRemoteControl(ITV tv) { this.tv = tv; } protected void turnOn(){ tv.on(); } protected void turnOff(){ tv.off(); } protected void setChannel(int channel){ tv.switchChannel(channel); }}public class LogitechRemoteControl extends AbstractRemoteControl { public LogitechRemoteControl(ITV tv) { super(tv); } public void turnOn(){ super.turnOn(); } public void turnOff(){ super.turnOff(); } public void setChannel(int channel){ super.setChannel(channel); }}
当我们修改TV接口的具体实现时,对于遥控器类是无感知的,同样的修改遥控器类的具体实现时,对于TV类也是透明的,当然我们也可以很容易的扩充产品,只有实现接口或者继承抽象类。有兴趣的朋友可以查看一下JDBC的代码,可以发现DriverManager类和Driver接口就是桥接关系,因此能实现灵活的扩展,只要产商提供Driver的实现就OK。
0 0
- 设计模式之桥接模式
- C# 设计模式 之 桥接模式
- c#设计模式之[桥接模式]
- 设计模式之桥接模式
- 设计模式之-Bridge-- 桥接模式
- 设计模式之桥接模式
- 设计模式之桥接模式
- 设计模式之Bridge(桥接模式)
- 设计模式之桥接模式
- 设计模式之Bridge(桥接模式)
- 设计模式之桥接模式BridgePattern
- C# 设计模式之桥接模式
- 设计模式之桥接模式
- 设计模式之桥接模式
- Java 设计模式 之 桥接模式
- Java 设计模式 之 桥接模式
- Java 设计模式 之 桥接模式
- 设计模式之桥接模式
- java stringbuffer的用法示例
- 四轴之互补滤波与四元数算法详细分析
- linux硬链接和软链接的区别
- 023.PendingIntent 概述
- JBPM4.4业务流程管理框架详细解读
- 设计模式之桥接模式
- StringMVC+Mybatis后台sql语句出现列名无效
- eclipse插件——maven
- stm32F429中断优先级相关知识
- Android Handler消息传递机制详解
- c程序中出现segment error 和 bus error 的原因
- 封装的ViewHolder
- 最小二乘法
- linux的open files的影响