设计模式之桥接模式(Bridge)--结构模型
2015-03-05 09:07
453 查看
1.意图
将抽象部分与它的实现部分分离,使它们可以独立地变化.2.适用性
你不希望在抽象和它的实现部分之间有一个固定的绑定关系。类的抽象与它的实现都应该可以通过子类的方式加以扩展。
抽象部分与实现部分可以独立变化,而不会相互影响。
从多维度扩展应用程序。
3.结构
4.参与者
Abstraction: 定义抽象的接口;维护一个指向Implementor对象的引用。RefinedAbstraction: 扩充有Abstracttion定义的接口。
Implementor: 定义实现类的接口,该接口不一定要与Abstraction接口完全一致,事实上这两个接口可以完全不同。一般来说,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
ConcreteImplementor: 实现Implementor接口并定义它具体实现。
5.效果
1) 分离接口及其实现部分。2) 提供可扩展性。
3) 实现细节对客户透明。
6.实例
1)场景
在消息发送的场景中,消息类型抽象为普通消息和紧急消息,发送实现方式为邮件和短信。使用桥接模式,既可以在消息类型的维度上增加各种类型抽象,也可以在发送方式维度上增加各种实现方式。两者独立变化,实现解耦的效果。2)UML图
3)代码
AbstractMessage抽象类public abstract class AbstractMessage { protected ISendMethod sm; public AbstractMessage(ISendMethod sm) { super(); this.sm = sm; } public void sendMessage(String str){ this.sm.send(str); } }
CommonMessage类
public class CommonMessage extends AbstractMessage{ public CommonMessage(ISendMethod sm) { super(sm); // TODO Auto-generated constructor stub } @Override public void sendMessage(String str) { // TODO Auto-generated method stub super.sendMessage(str); } }
UrgentMessage类
public class UrgentMessage extends AbstractMessage{ public UrgentMessage(ISendMethod sm) { super(sm); // TODO Auto-generated constructor stub } @Override public void sendMessage(String str) { // TODO Auto-generated method stub str += "(Urgent!!!)"; this.sm.send(str); } }
ISendMethod接口
public interface ISendMethod { public void send(String str); }
SendEmail类
public class SendEmail implements ISendMethod { @Override public void send(String str) { // TODO Auto-generated method stub System.out.println("This is a email message:"+ str); } }
SendSms类
public class SendSms implements ISendMethod { @Override public void send(String str) { // TODO Auto-generated method stub System.out.print("This a sms message:" + str); } }
Main测试类
public class Main { public static void main(String[] args){ ISendMethod sender = new SendEmail(); AbstractMessage aMessage = new UrgentMessage(sender); aMessage.sendMessage("Test"); ISendMethod sender2 = new SendSms(); AbstractMessage aMessage2 = new CommonMessage(sender2); aMessage2.sendMessage("Test2"); } }
输出结果
This is a email message:Test(Urgent!!!)
This a sms message:Test2
相关文章推荐
- 设计模式之类对象结构型 — BRIDGE (桥接)模式
- 设计模式之桥接(Bridge)---对象结构性模式
- 设计模式--桥接模式Bridge(结构性)
- JAVA设计模式(07):结构型-桥接模式(Bridge)
- 设计模式--桥接模式Bridge(结构性)
- java23中设计模式——结构模式——Bridge(桥接) 3ff0
- JAVA设计模式(07):结构型-桥接模式(Bridge)
- 设计模式之Bridge(桥接)
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- 设计模式--桥接模式(Bridge)
- .NET设计模式-桥接模式(Bridge Pattern)
- 设计模式学习之桥接模式(Bridge)
- 设计模式之桥接模式(Bridge)
- 设计模式之Bridge桥接设计模式
- 设计模式--桥接模式(Bridge)
- 设计模式-----桥接模式(Bridge Pattern)
- 设计模式--桥接模式(Bridge)
- 设计模式之桥接模式(Bridge)
- 设计模式学习笔记(八)——Bridge桥接
- .NET设计模式-桥接模式(Bridge Pattern)