设计模式目录
通常,模式是指有助于轻松执行某些任务的特定布局。从技术上讲,模式可以被视为帮助程序共享其设计知识的设备。
术语设计模式在面向对象的术语中用于执行任务,例如定义对象、类、接口层次结构并将它们分解为具有关系的类。一旦所有这些步骤都被视为一种模式,他们就可以通过将它们应用于几个常见问题来重用它们。
设计模式可以被认为是软件设计中常见问题的可重用解决方案。设计模式不是完成的设计,而是在许多不同的解决方案中解决问题的模板。
最有影响力的设计模式工作是由 Gamma、Helm、Jhonson 和 Vlissides 完成的,它们通常被称为 Group of Four (GOF)。 GoF 设计模式可以描述为为解决特定上下文中的设计问题而定制的类和对象之间的通信。
设计模式的基本要素:
设计模式有四个基本要素。它们如下:
- 模式名称:它是描述设计问题的唯一名称。模式名称简洁而有意义,改善了开发人员之间的沟通,并有助于在更高的抽象层次上设计模式。
- 问题:它说明问题及其上下文,例如如何将算法表示为对象(它确保模式何时适用以及在使用模式之前应满足什么条件。
- 解决方案:它提供了构成设计模式的元素的描述,例如它们的职责、关系和协作)。模式解决方案无法描述特定的实现,因为模式就像适用于几种类似情况的模板。该解决方案提供了类和对象的通用排列来解决问题。
- 后果:顾名思义,这些突出了应用模式的结果、利弊等,(它描述了对系统的可移植性、可扩展性的影响。它们确定成本并评估模式、语言和实现问题的设计备选方案。
设计模式目录:
设计模式被组织成目录的形式。这些设计模式通过查找对象、指定对象实现、对象接口、确定对象粒度、实现重用机制等共同协助软件工程。意图指定了设计模式的作用。一些模式及其名称和意图如下,
- 抽象工厂:它指示要实例化的工厂,提供一个接口来创建对象系列(相关/依赖),而无需对其具体类进行任何规范。
- Adaptor: Id 根据客户的期望将一个类的接口适配或转换为另一个接口,从而克服接口不兼容的问题,从而使类能够协同工作。
- 桥:它将抽象与其实现分开,使它们独立。
- Builder:它将复杂对象的构造与其表示分离,以便用相同的构造过程创建不同的表示。
- 责任链:它通过使用对象处理中存在的逻辑将命令对象传递给其他对象来启用对命令对象的处理。换句话说,它通过格式化接收对象链来传递请求,直到请求被对象处理,从而将发送者和接收者解耦。
- 命令:它封装了动作及其参数,因此可以参数化客户端的不同请求,例如长请求或队列请求。它还有助于可撤消的操作。
- 复合:它表示树结构中的对象,其中每个对象表示相同的接口。这使客户能够统一处理单个对象及其组合。
- 装饰器:它在运行时向类添加附加功能。这可以灵活地进行子类化以添加功能。
- 外观:它创建子系统中现有接口的简化/统一接口,以便轻松处理常见任务。
- 工厂方法:它专注于特定实现的对象创建。让子类决定要实例化哪个类。
- Flyweight:它通过大量对象执行公共对象属性的共享以节省空间。
- 解释器:它处理解决特定问题的指定计算机语言的实现。它通过与解释器一起表示语言的语法来解释语言中的句子。
- 迭代器:它通过隐藏其底层表示来启用顺序聚合对象元素。
- 中介者:它为子系统中的一组接口提供统一的接口。它提供了松散耦合,使对象能够显式地引用每个对象,并且还可以独立地改变对象交互。
- Momento:它通过启用对象来支持回滚机制,在不违反封装的情况下恢复到它们以前的状态。
- 观察者:当一个对象改变其状态时,它会引发一个事件,通知其他对象并自动更新它们。这定义了对象之间的一对多依赖关系。
- Prototype:这里Prototypical实例决定了要创建的对象的类型。通过克隆这个原型来创建更多的新对象。
- 代理:它通过将占位符应用于其他对象来提供一种错觉,以便对其进行控制。
- Singleton:它提供了将类实例化为单个对象的限制,并使其可以全局访问。
- 状态:它允许通过改变其状态来改变对象的行为。即允许对象类型在运行时改变。
- 访问者:它描述了程序的骨架,使子类能够定义算法的一些步骤,也可以在不影响算法结构的情况下重新定义某些步骤。
- 策略:它定义了算法族及其基于客户的选择。
软件工程中设计模式的使用:
软件工程上下文中的设计模式是软件设计中出现的常见问题的模板或可重用解决方案。这通常用类和对象、接口等来表示。设计模式的一个应用是“解决方案的可重用性”,通过使用经过验证的解决方案,用户可以解决软件开发问题,从而能够开发具有耦合性的高内聚模块.
设计模式需求:
- 实现设计师之间的高效沟通。
- 仅通过引用模式名称即可解决问题。
- 提高编码人员的代码可读性。
- 通过重用经过测试和验证的开发范例来减少寻找解决方案的时间。
- 减少编码人员的时间。
- 引入额外的间接级别以实现灵活性。
- 减少理解设计的时间。
- 避免那些避免可重用性从而减少变化的替代方案。
- 提高设计的可理解性和文档。
- 有助于更轻松、更快速地理解面向对象设计的基础知识。