模式】概述"/>
【设计模式】概述
一、设计模式意义
引用鲁迅《故乡》的一句话
设计模式本是无所谓有、无所谓无的,设计的人多了,也便成为了模式
推荐一篇很不错的博客如何通俗理解设计模式及其思想
二、设计模式分类
2.1 二十三种经典设计模式
Gang of Four(四人组)是《Design Patterns: Elements of Reusable Object-Oriented Software》(设计模式)的作者。包括:
- Erich Gamma
- Richard Helm
- Ralph Johnson
- John Vlissides
创建型模式(5种) | 结构型模式(7种) | 行为型模式(11种) |
---|---|---|
单例模式 | 适配器模式 | 模板方法模式 |
工厂方法模式 | 装饰模式 | 策略模式 |
抽象工厂模式 | 外观模式 | 状态模式 |
建造者模式 | 代理模式 | 命令模式 |
原型模式 | 桥接模式 | 责任链模式 |
组合模式 | 观察者模式 | |
享元模式 | 中介者模式 | |
备忘录模式 | ||
解释器模式 | ||
迭代器模式 | ||
访问者模式 |
2.2 其它常用设计模式
除过23种经典的设计模式之外,还有一些设计模式也很常用。比如:
- 并发型模式
- 线程池模式
- 简单工厂模式
三、设计模式原则
3.1 开闭原则(Open Close Principle)——总原则
-
开闭原则的意思是:对扩展开放,对修改关闭。
-
在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。
-
简言之,是为了使程序的扩展性好,易于维护和升级。
-
想要达到这样的效果,我们需要使用接口和抽象类。
3.2 单一职责原则(Single responsibility principle)
- 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。
3.3 里氏替换原则(Liskov Substitution Principle)
-
LSP是面向对象设计的基本原则之一。
-
任何基类可以出现的地方,子类一定可以出现。
-
LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
-
LSP是对“开-闭”原则的补充。
-
实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
3.4 依赖倒置原则(Dependence Inversion Principle)
-
这个原则是开闭原则的基础。
-
针对接口编程,依赖于抽象而不依赖于具体。
3.5 接口隔离原则(Interface Segregation Principle)
-
每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。
-
使用多个隔离的接口,比使用单个接口要好。
3.6 迪米特法则 / 最少知识原则(Demeter Principle)
-
一个类对自己依赖的类知道的越少越好。
-
也就是说无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。
-
这样当被依赖的类变化时,才能最小的影响该类。
-
最少知识原则的另一个表达方式是:
只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。
耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。
局部变量、临时变量则不是直接的朋友。
我们要求陌生的类不要作为局部变量出现在类中。
3.7 合成复用原则(Composite Reuse Principle)
- 尽量首先使用合成/聚合的方式,而不是使用继承。
四、MVC模式
MVC模式可能是最早听过的模式了。但是为什么23种设计模式中没有MVC模式呢?
GoF把它当作一组用于构建用户界面的类集合。MVC模式其实是三个经典设计模式的演变——观察者模式、策略模式、组合模式。根据MVC在框架中的实现不同可能还会用到工厂模式和装饰器模式。
MVC被称为软件系统的架构模式更为合适
五、 UML类图
5.1 关系
关系 | 形状 | 场景 |
---|---|---|
依赖 | 带普通箭头的虚线,指向被依赖者 | 方法调用、方法的参数或返回值 |
关联 | 带普通箭头的实线,指向被关联者。可以双向关联 | 一般关系 |
聚合 | 一端空心菱形箭头一端普通箭头的实线,菱形指向整体,普通箭头指向组件 | 成员变量 |
组合 | 一端实心菱形箭头一端普通箭头的实线,菱形指向整体,普通箭头指向局部 | 生命周期一致的整体和局部 |
泛化 | 带空心三角箭头的实线,指向基类 | 继承 |
实现 | 带空心三角箭头的虚线,指向接口 | 实现接口 |
更多推荐
【设计模式】概述
发布评论