一、什么是设计模式
“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”
——Christopher Alexander
尽管Alexander所指的是城市和建筑模式,但他的思想也同样适用于面向对象设计模式。
受Alexander的启发,Erich Gamma、Richard Helm、Ralph Johnson、Jshn Vlissides四人(人称Gang Of Four,GOF)总结了23种常见的软件开发设计模式
这23种设计模式并不描述新的或未经证实的设计,而是经过验证,用于解决在特定环境下、特定问题的解决方案。
1.1 设计模式四要素
- 模式名称:助记名,便于记忆和交流
- 问题:交代特定的问题场景
- 解决方案:确定了所包含的类和实例,它们的角色、协作方式以及职责分配
- 效果:使用此解决方案之后所带来的最终效果
1.2 为什么需要学习设计模式
- 1.设计模式已成为软件开发行业的“标准词汇”
- 2.个人技术提高的必备知识
- 3.无须重复造轮子
二、设计模式的分类
GOF将设计模式分为23种设计模式,其中分为三大类
2.1 创建型模式
抽象了对象实例化的过程,用来帮助创建对象的实例
2.2 结构型模式
描述如何组合类和对象以获取更大的结构
2.3 行为型模式
描述算法和对象间的职责分配
2.4 设计模式总览
上面标红色五角星的为必须理解透彻的设计模式
三、UML类图
为了更好的学习和理解设计模式,学习设计模式之前,需要掌握UML类图
3.1 UML类图
UML,全称:统一建模语言(Unified Modeling Language)它是让系统可视化的表现手段。
UML类图主要用来表示类、接口、实例之间相互的静态关系。本系列使用Java语言作为代码演示,约定Java的字段属性与UML的属性(Attribute)对等,Java的方法与UML的操作(Operation)对等。
3.2 UML类图几种关系
1.依赖关系(dependency)
它描述一个对象在运行期会使用到另一个对象的关系。依赖是一种临时性的关系,通常都是在运行期间产生,并随着运行场景的不同,依赖关系也可能发生变化
比如人和船这两个对象,如果场景是:开动轮船,那么船依赖于人。如果场景是:渡海,那么人依赖于船
2.泛化(generalization)
说明两个对象之间的继承关系。被继承的类称为父类,继承的类称为子类
3.实现(realization)
描述在一个类中描述,具体实现由另一个类在实现细节
4.关联(association)
描述了一个事物对象与另一个事物对象相关联。其中关联又具体分为:聚合关系、组合关系。
聚合关系:表达整体由部分构成。例如:一个班级由多个学生构成。
组合关系:表达整体拥有部,是一种强依赖的聚合关系。例如:人体是由头部和眼睛组成.