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);
}
@Override
public void sendMessage(String str) {
super.sendMessage(str);
}
}
UrgentMessage类
public class UrgentMessage extends AbstractMessage{
public UrgentMessage(ISendMethod sm) {
super(sm);
}
@Override
public void sendMessage(String str) {
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) {
System.out.println("This is a email message:"+ str);
}
}
SendSms类
public class SendSms implements ISendMethod {
@Override
public void send(String str) {
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
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理.docx虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理.docx虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理.docx虚拟机VMware3种网络...
设计模式专题之(十)桥接模式---设计模式桥接模式示例代码(python--c++)
计算机后端-Java-图解java设计模式069 桥接模式(4)-J.avi
创建型模式总结 (100%) 设计模式面面观(9):适配器模式(Adapter Pattern)-结构型模式 (100%) 设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式 (100%) 设计模式面面观(11):组合模式...
实例讲解虚拟机3种网络模式(桥接、nat、Host-only),请用notepad 或Uedit32打开
7、桥接模式(bridge) 用意:将抽象部分和实现部分分离,使他们可以独自变化
设计模式之桥接模式 设计模式之桥接模式 设计模式之桥接模式
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
免费提供个人设计模式简易代码,代码结构层次清晰,并且内含基本所有的注释,非常有利于初学者学习设计模式
设计模型之桥接模式 bridge C++实现源码,vs2019
JAVA-设计模式-结构型模式-桥接模式
设计模式 - 桥接模式
c++设计模式-结构型模式-桥接模式;qt工程,c++简单源码; 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度...
主要为大家详细介绍了C++设计模式之桥接模式Bridge,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
设计模式的桥接模式的例子,希望对大家有用
主要为大家详细介绍了java设计模式之桥接模式Bridge,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
【IT十八掌徐培成】Linux第02天-04.网络连接方式-桥接-NAT-OnlyHost-静态ip配置.zip