layout: post
title: 一文搞懂设计模式
categories: 设计模式
tag: 设计模式
一文搞懂设计模式
1、前言
-
为什么要学习设计模式?
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
-
设计模式如何来的?
1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称
GoF设计模式
。
2、软件设计模式概述
-
软件设计模式的概念
软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
-
学习设计模式的意义
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。
-
软件设计模式的基本要素
- 模式名称
- 问题
- 解决方案
- 解决的效果
正确使用设计模式具有以下优点。
- 可以提高程序员的思维能力、编程能力和设计能力。
- 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
- 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。
3、UML中的类图及类图之间的关系
先理解一下UML中的一些概念
- UML 统一建模语言。
- 类 指具有相同属性,方法和关系的对象的抽象,封装了数据和行为,是面向对象设计的基础,具备封装,继承,多态三大特性。
- 接口 接口是一种特殊的类,具有类的结构但是不可以被实例化,只可以被子类实现,包含抽象操作,但不包含属性。
- 类图 是用来显示系统中的类,接口,协作以及他们之间的静态结构和关系的一种静态模型,主要用于描述软件系统的结构化设计,帮助人们简化对软件系统的理解。
看一下类之间的关系大概有以下几种
-
依赖关系
依赖关系是一种使用关系,是对象之间耦合度最弱的一种关联关系,临时性的管理,在代码中,某个类的方法通过局部变量,方法的参数或者对静态方法的调用来访问另一个类的某些方法完成职责。注意,在UML中使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。
-
关联关系
关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,比如,老师和学生,师傅和徒弟关联关系是类之间常用的一种关系。
关联关系可以是双向的,也可以是单向的,在UML类图中,双向的话使用带箭头或者不带箭头的实线来表示,单向的关联使用带一个箭头的实线来表示。
-
聚合关系
聚合关系是关联关系中的一种,是强关联关系,整体和部分之间的关系,是has-a的关系。
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
在UML类图中,聚合关系可以用待空心菱形的实线来表示、
-
组合关系
组合关系是关联关系中的一种,表示类之间的整体和部分的关系,是一种更强烈的关系,是contains-a的关系。在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。
在UML类图中,组合关系使用实心菱形加上实线表示。
-
泛化关系
泛化关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类和子类之间的关系,是一种继承关系,是is-a的关系。
在UML类图中,泛化关系使用空心三角箭头的实线来表示,箭头从子类指向父类。
-
实现关系
实现关系是接口和实现类之间的关系,这种关系,实现类实现了接口内容。
在UML类图中,使用空心三角形的虚线来表示,从实现类指向接口。
4、六大设计原则
对于设计模式来讲,设计原则是根本,设计模式是方法,方法要遵循根本的要求,六大设计原则分别是
- 开闭原则
- 里氏替换原则
- 依赖倒置原则
- 单一职责原则
- 接口隔离原则
- 迪米特法则
以下,分别对六大原则详细解释
4.1、开闭原则