GoF设计模式

GoF的《设计模式》阅读以及基于golang的实现(•̀⌄•́)
                              —— By Jihan


意指都在快速全面的解决问题,寻找和实现一个最为合适的模式

设计模式是做什么的?它的基本原理和意图是什么?它解决的是什么样的特定设计问题?

基础

四个基本要素:

  1. 模式名称 (pattern name)
    一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。
  2. 问题(problem)
    描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
  3. 解决方案 (solution)
    描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
  4. 效果(consequences)
    描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。

设计模式怎样解决设计问题?
寻找合适的对象
决定对象的粒度
指定对象接口
描述对象的实现:确定你的系统时针对接口编程,而不是针对实现。
运用复用机制,尽量避免重复代码。
关联运行时刻和编译时刻的结构
设计应支持变化,拓展和解耦
怎样选择设计模式
1. 设计模式解决什么样的问题
2. 浏览已知模式的设计意图
3. 研究模式怎么相互关联
4. 检查哪些是需要拓展,需要解耦
怎样使用模式
1. 大致浏览模式,选择合适你问题的部分
2. 选择模式,并放在合适的位置,明确主要部分和协助部分
3. 参看示例代码,并明确其上下文意义
4. 将模式尝试嵌入到你的实际问题中

2.3

-------------本文结束感谢您的阅读-------------