设计模式入门之桥接模式Bridge
2014-05-19 23:47
267 查看
![](http://images.cnitblog.com/blog/277239/201305/10210607-80d6f7920f8f43c9bab09eee42148746.jpg)
Abstraction:抽象部分的父类,定义需要实现的接口。维护对实现部分的引用,从而把实现桥接到Implementor中去
Implementor:实现部分的接口
RefinedAbstraction:扩展抽象部分的接口
ConcreteImplementorA/B:真正实现Implementor接口的对象
//桥接模式定义:将抽象部分与它的实现部分分离,使得他们都可以独立地变化。抽象部分只定义出需要实现什么方法(非抽象方法),相当于只给出一个方法的接口,接口中去调用桥接过来的具体实现类去实现,从而实现灵活的扩展性 //广义来讲,桥接模式非常普遍,面向抽象编程,面向接口编程就可以看作是他的体现 //实例:一个系统,要按照不同的要求发信息(普通,加急,特急),而且还要以不同的方式发送(站内信,Email,短信)等,考虑到其扩展性,用桥接模式再合适不过了 //上代码 //桥接的一半---抽象部分 public abstract class AbstractionMessage { protected MessageImplementor impl; public AbstractMessage(MessageImplementor impl) { this.impl = impl; } public void sendMessage(String message, String toUser) { this.impl.send(message, toUser); } } //发送消息的统一接口,即桥接的另一半---实现的接口 public interface MessageImplementor { public void send(String message, String toUser); } //桥接的另一半---实现 public class MessageSMS implements MessageImplementor { public void send(String message,String toUser) { System.out.println("使用站内信方式,发送消息'"+message+"'给"+toUser); } } //桥接的另一半---实现 public class MessageEmail implements MessageImplementor { public void send(String message,String toUser) { System.out.println("使用邮件方式,发送消息'"+message+"'给"+toUser); } } //普通消息 public class CommonMessage extends AbstractionMessage { public CommonMessage(MessageImplementor impl) { super(impl); } public void sendMessage(String message, String toUser) { super.sendMessage(message, toUser); } } //加急消息 public class UrgencyMessage extends AbstractionMessage { public UrgencyMessage(MessageImplementor impl) { super(impl); } public void sendMessage(String message, String toUser) { super.sendMessage(message, toUser); } public Object watch(String messageId) { return null;//获取相应的数据,组织成监控的对象,然后返回 } } //客户端测试类 public class Client { public static void main(String[] args) { MessageImplementor impl = new MessageSMS(); AbstractionMessage m = new CommonMessage(impl); m.sendMessage("测试", "小李"); MessageImplementor impl2 = new MessageEmail(); AbstractionMessage m2 = new UrgencyMesssage(impl2); m2.sendMessage("测试", "小李"); } } //从客户端的调用可以看出来,不管是要增加消息类型还是发送消息的方式,完全是件非常简单的事情,因为没有耦合,扩展起来非常轻松。 //关于谁来桥接 //1.由抽象部分的对象自己来创建相应的Implementor对象,根据参数判断具体创建哪个 //2.在Abstraction中创建默认的Implementor对象,如果需要,让子类来修改 //3.使用抽象工厂或简单工厂 //4.使用IoC/DI方式 //Java中的JDBC就是非常典型的桥接应用 //桥接模式的本质:分离抽象和实现 //桥接模式很好地提现了开闭原则OCP //优点: //1.分离抽象和实现部分 //2.更好的扩展性 //3.可动态地切换实现 //4.减少子类的个数 //使用桥接模式的场景 //1.如果你不希望在抽象部分和实现部分采用固定的绑定关系,可以采用桥接模式 //2.如果出现抽象部分和实现部分都能够扩展的情况,可以采用桥接模式 //3.如果希望实现部分的修改不会对客户产生影响,可以采用桥接模式 //4.如果采用继承的实现方案,会导致产生很多子类,对于这种情况,也可采取桥接模式
相关文章推荐
- 设计模式入门学习 桥接Bridge模式
- 设计模式入门之桥接模式Bridge
- 设计模式与泡mm的关系之Bridge桥接模式及桥接模式的再思考
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- 设计模式循序渐进(1)桥接模式 Bridge
- [导入]C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式).zip(9.01 MB)
- Java设计模式(三)Adapter(适配器),Bridge(桥接)
- 设计模式学习笔记(四)—Bridge桥接模式
- 设计模式学习笔记(八)——Bridge桥接模式
- 设计模式--桥接模式(Bridge)
- 设计模式--桥接模式(Bridge)
- .NET设计模式(9):桥接模式(Bridge Pattern)
- 设计模式 Bridge 桥接模式
- 设计模式学习之桥接模式(Bridge)
- 设计模式之桥接模式(Bridge)
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- [导入]C#面向对象设计模式纵横谈之7.Bridge 桥接模式
- 设计模式之桥接(Bridge)---对象结构性模式
- 设计模式学习笔记--Bridge桥接模式
- 设计模式--桥接模式(Bridge)