设计模式概述

文章目录
  1. 1. 设计模式简介
  2. 2. 设计模式分类
    1. 2.1. 创建型模式
    2. 2.2. 结构型模式
    3. 2.3. 行为型模式
  3. 3. 类之间关系
  4. 4. staruml逆向问题
  5. 5. 源码分享
  6. 6. 参考文献

设计模式简介

1979年,建筑师亚历山大编写了《建筑的永恒之道》,这本书阐述了建筑与规划的新观点。作者通过对当代建筑的研究发现:优秀的建筑中,总是存在着一些相似之处。如果能够找出这些优秀建筑的特征,就能够找到这些建筑是采用了哪些方法,如何设计才变得优秀的,从而也就能够客观评价一个建筑设计的好坏。通过找出并掌握这些优秀建筑的设计方法,建筑师就可以把这些方法复制到其他的建筑设计中,从而设计出同样优秀的建筑来。

建筑行业中存在的情况和软件行业存在的情况类似。在软件行业,是否也能够从那些优秀的软件中,找到一些相同的特征、优秀的设计方法,从而使软件开发人员能够掌握这些方法,并将其应用到其他的软件开发中,从而也开发出同样优秀的软件呢?

为了探讨这个问题,很多软件开发人员开始了这方面的研究,其中影响最大的文献是《设计模式》一书,该书的四个作者被称为GoF或Gang of Four。这本书总结了人类历史上软件开发的经验,给出了描述模式的一些特征,并提炼出用于指导软件设计的23种模式和一些面向对象的设计方法。

设计模式分类

设计模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。

创建型模式

软件设计方面,分工越来越细,因此对象的创建和对象的使用分开也就成了必然趋势。因为对象的创建会消耗很多资源,所以对对象的创建进行研究,能够高效地创建对象就是创建型模式要探讨的问题。
创建型模式有6个:

  • 简单工厂模式(Simple Factory)
  • 工厂方法模式(Factory Method)
  • 抽象工厂模式(Abstract Factory)
  • 创建者模式(Builder)
  • 原型模式(Prototype)
  • 单例模式(Singleton)

结构型模式

在解决了对象的创建问题后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低。
结构型模式有7个:

  • 外观模式(Facade)
  • 适配器模式(Adapter)
  • 代理模式(Proxy)
  • 装饰模式(Decorator)
  • 桥模式(Bridge)
  • 组合模式(Composite)
  • 享元模式(Flyweight)

行为型模式

在对象的创建和对象的结构问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高。
行为型模式有11个:

  • 模板方法模式(Template Method)
  • 观察者模式(Observer)
  • 状态模式(State)
  • 策略模式(Strategy)
  • 职责链模式(Chain of Responsibility)
  • 命令模式(Command)
  • 访问者模式(Visitor)
  • 调停者模式(Mediator)
  • 备忘录模式(Memento)
  • 迭代器模式(Iterator)
  • 解释器模式(Interpreter)

类之间关系

在面向对象设计模式中,类与类之间主要有6种关系,分别是:依赖、关联、聚合、组合、继承、实现,耦合度依次增强。

  • 依赖,一个类的方法里使用了另一个类。
  • 关联,一个类里包含另一个类作为属性(成员变量)。
  • 聚合,强的关联,整体与个体。
  • 组合,更强的关联,同生共死。
  • 继承
  • 实现

staruml逆向问题

使用staruml逆向生成类图的时候,提示错误:“Description: Unrecoverable Parse Error”。

原因1:java文件编码为包含BOM的UTF-8,而BOM在staruml中无法处理。
解决办法:使用格式转换工具,转换为不包含BOM的UTF-8。或者,转换为GB2312。

原因2:java文件中包含@Override等标签,staruml无法识别。
解决办法:去掉标签。或者换用其他逆向工具,比如WhiteStarUML、BOUML、UMLet等。

源码分享

https://github.com/voidking/design.git

参考文献

《易学设计模式》
《大话设计模式》
接口设计六大原则
软件设计六大设计原则讲解
了解这23种设计模式
依赖、关联、聚合和组合及其之间区别的简单理解
StarUML使用说明-指导手册
使用StarUML画类图
UML建模之时序图(Sequence Diagram)