本文主要是介绍设计模式——13 与设计模式相处(真实世界中的模式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 与设计模式相处
- 综述
- 什么事设计模式
- 力
- 要点
- 怎么选择模式?
- 分类方式
- 创建型、行为型、结构型
- 创建型
- 行为型
- 结构型
- 类、对象
- 类
- 对象
- 创建型、行为型、结构型
- 模式动物园
- 反模式
- 例子
- 综述
与设计模式相处
综述
什么事设计模式
在某情境(Context)下,针对某问题的某种解决方案
情境:应用某个模式的情况
问题:逆向在某情境下达到的目标
解决方案:一个通用的设计,用来解决约束、达到目标
问题:我要如何准时上班?
情境:我将要是锁在车里了。
解决方案:打破 窗户、进入车内,启动引擎,然后开车上班。
力
一个目标,一个约束
需要力平衡(目标与约束平衡)才能创建一个模式的解决方案。
要点
- 让设计模式自然而然地出现在你的设计中,而不是为了使用而使用
- 设计模式并非僵化的教条;你可以依据自己的需要采用或调整。
- 总是使用满足需要的最简单解决方案,不管它用不用模式。
- 学习设计模式的类目,可以帮你自己熟悉这些模式以及它们之间的关系。
- 模式的分类(或类目)是将模式分成不同的族群,如果这么做对你有帮助,就采用吧!
- 你必须相当专注才能够成为一个模式的作家:这需要时间也需要耐心,同时还必须乐意做大量的精化工作。
- 请牢记:你所遇到大多数的模式都是现有模式的变体,而非新的模式。
- 模式能够为你带来的最大好处一是:让你的团队拥有共享词汇。
- 任何社群都有自己的行话,模式社群也是如此。别让这些行话绊着,在读完这本书之后,你已经能够应用大部分的行话了。
怎么选择模式?
模式名和分类
——模式名简洁地描述了模式的本质
意图
——设计模式是做什么的?它的基本原理和意图是什么?它解决的是什么样的特定设计问题?
别名
——模式的其他名称
动机
——用以说明一个设计同题以及如何用模式中的类、对象来解决该问题的特定情景。该情景会帮助你理解随后对模式更抽象的描述。
适用性
——什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?你怎样识别这些情况?
结构
——采用基于对象建模技术(OMT)[RBP+91]的表示法对模式中的类进行医形描述。我们也使用了交互图[JCJ092,B0094]来说明对象之间的请求序列和协作关系。附录B详细描述了这些表示法。
参与者
——指设计模式中的类和/或对象以及它们各自的职责。
协作
——模式的参与者怎样协作以实现它们的职责。
效果
—— 模式怎样支持它的目标?使用模式的效果和所需做的权衡取舍?系统结构的哪些方面可以独立改变?
实现
——实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的回题。
代码示例
——用来说明怎样用c++或smalltalk实现该模式的代码片段。
己知应用
——实际系统中发现的模式的例子。每个模式至少包括了两个不同领域的实例。
相关模式
——与这个模式紧密相关的模式有哪些?其闾重要的不同之处是什么?这个模式应与哪些其他模式一起使用?
命令模式
当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式
分类方式
创建型、行为型、结构型
创建型
涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦
Singleton
Builder
Prototype
Abstract Factory
Factory Method
行为型
涉及到类和对象如何交互及分配职责
Template Method
Visitor
Mediator
Iterator
Command
Memento
Interpreter
Observer
Chain of Responsibility
State
Strategy
结构型
把类或对象组合到更大的结构中
Decorator
Proxy
Composite
Flyweight
Bridge
Adapter
类、对象
类
描述类之间的关系如何通过集成定义。类模式的关系是在编译时建立的。
Template Method
Adapter
Factory Method
Interpreter
对象
描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态、更有弹性。
Decorator
Proxy
Composite
Flyweight
Bridge
Visitor
Mediator
Iterator
Command
Memento
Observer
Chain of Responsibility
State
Strategy
singleton
builder
prototype
abstract Factory
模式动物园
架构模式
用来建立生气勃勃的建筑、城镇和城市的架构。这也正是模式开始的地方
栖息地:从你所居住、观看、参观的建筑物中,可以发现它的踪迹。
应用模式
是建立系统级架构的模式。许多多层的架构都属于这一类目
栖息地:出现在三层架构、客户/服务器系统以及Web中
野外笔记:MVC可算是其中的一种
领域特定模式
关注特定领域的问题,例如并发系统或实时系统
栖息地:
业务流程模式
描述业务、顾客和数据之间的交互,此种模式能够处理如“如何有效决策并沟通决策”之类的问题。
出没公司的会议室以及项目管理会议中
组织模式
描述了人类组织的结构以及实践。到目前为止大多数努力聚焦于制造或支持软件的组织
栖息地:
开发团队:
顾客支持团队:
用户界面设计模式
致力于解决设计交互式软件时的问题。
栖息地:被发现在视频游戏设计者、cuj构造者和制作者附近
反模式
告诉你如何采用一个不好的解决方案解决一个问题
例子
名称:黄金榔头
问题:你需要为你的开发选择技术,而且你相信正好有一种技术能够主宰这个架构。
情境:你需要开发某个新的系统或者是一套软件,然而此系统或软件却无法和开发团队所熟悉的技术相吻合。
力:(告诉你为什么这个解决方案是有吸引力的)
开发团队致力于采用他们所熟悉的技术。
开发团队并不熟悉其他技术。
采用不熟悉的技术被认为风险比较高。
使用熟悉的技术做开发,比较容易规划
和预估。
原本的解决方案:
反正就使用熟悉的技术好了。将熟悉的技术强迫性地用在许多问题上,甚至在明显不适当的地方也照用。(不好但有吸引力的解决方案)
重构的解决方案:开发人员通过教育、培训和读书会,可以学会新的解决方案。 (如何使用一个好的解决方案)
例子:(这个反模式会出现在什么地方)
当采用开放源码的替代品时,web公司依然持续使用并维护他们内部自行开发的缓存系统。
这篇关于设计模式——13 与设计模式相处(真实世界中的模式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!