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>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与其实现部分解耦,使得它们可以独立地进行变化和发展。在C++编程中,这种模式的应用可以帮助我们构建灵活、可扩展的系统,尤其在面对...
本实验主要探讨了两种经典的设计模式:桥接模式(Bridge Pattern)和装饰模式(Decorator Pattern)。这两种模式都是面向对象设计中的重要工具,能帮助我们构建灵活且可扩展的代码。 **桥接模式**是一种结构型设计...
### 设计模式与GRASP原则详解 #### 一、设计模式概述 设计模式是指在软件设计过程中,针对一些常见问题的解决方案。它并不是一个具体的代码片段或者类库,而是一种解决问题的思想方法。设计模式能够帮助开发者更好...
Java的21种设计模式涵盖了创建型、结构型和行为型三大类别,有助于提高代码的可读性、可维护性和可扩展性。 1. **创建型模式(Creational Patterns)** - **单例模式(Singleton)**:确保一个类只有一个实例,并...
结构型模式如适配器(Adapter)、装饰器(Decorator)、代理(Proxy)、桥接(Bridge)和组合(Composite),则关注如何将不同组件组合成更复杂的结构,以实现新的功能。行为型模式如策略(Strategy)、观察者...
设计模式可以大致分为三类:创建型模式、结构型模式和行为型模式。接下来我们将分别探讨这三类模式在JDK中的应用。 ### 结构型模式 结构型模式关注于如何组织类和对象的组合方式,以便形成更大的结构。以下是几种...
《设计模式》一书还探讨了其他重要模式,如单例模式(Singleton)、建造者模式(Builder)、观察者模式(Observer)、装饰器模式(Decorator)、代理模式(Proxy)、享元模式(Flyweight)、桥接模式(Bridge)、...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。在C++编程中,理解并应用设计模式可以显著提升代码的可读性、可维护性和复用性。本资源“23种设计模式的解析与Cpp实现”详细介绍...
- **UML** (Unified Modeling Language): 作为设计模式的重要工具之一,UML能够帮助开发者清晰地表达设计模式的概念和实现细节。例如,可以通过UML类图来展示桥接模式中的抽象与实现之间的分离关系;使用UML序列图来...
“Structural”则代表结构设计模式,这些模式帮助我们构建更复杂的软件结构,如桥接模式(Bridge Pattern)用于分离抽象接口和实现部分,使两者可以独立变化;组合模式(Composite Pattern)将对象组合成树形结构,...
3ds Max是一款由Autodesk公司开发的三维建模、动画和渲染软件,广泛应用于游戏开发、视觉效果和建筑设计等领域。为了提高工作效率和UV贴图质量,3ds Max用户经常需要借助第三方插件来优化UV展开过程,其中RizomUV...
在"model-arithmetic-parent-master"这个文件中,可能包含了与数学计算相关的模型或算法实现,这些实现可能会巧妙地运用了设计模式来提高代码的结构和效率。 学习和理解设计模式对于任何软件开发者来说都是至关重要...
在编程领域,设计模式是一种被广泛认可的解决特定问题或实现特定目标的代码结构模板。经典C++设计模式是软件开发中的重要课题,它能够帮助程序员编写可复用、可维护和可扩展的代码。本教程以通俗易懂的方式讲解了...
设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 创建型模式提供了创建对象的机制,同时又避免了暴露创建逻辑,并且提供了一种将创建逻辑和使用逻辑分离的清晰方式。例如: - 工厂模式(Factory ...
2. 结构型模式:如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式关注于如何将类或对象...
此外,文中还提到了其他设计模式在报表系统中的应用,如观察者(Observer)模式,用于实现模型和视图之间的实时同步,当模型数据发生变化时,观察者(视图)会收到通知并作出响应。适配器模式(Adapter)则帮助不同...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的模板,能够提升代码的可读性、可维护性和复用性。在Java世界中,有23种经典的设计模式,它们被广泛应用于Spring Boot这样的现代框架中。...
结构型模式则关注如何组合对象和类以构建更复杂的设计,例如适配器模式(Adapter)用于接口转换,桥接模式(Bridge)解耦抽象与实现,装饰模式(Decorator)允许在运行时动态地给对象添加新的行为或责任。...
2. 结构型模式:如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)和外观模式(Facade),这些模式关注如何组合对象和类,以构建更大的结构。...