首先,抛出一些概念性的东西
定义
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可复用代码、让代码更容易被他人理解并且提升代码可靠性。
关键要素
模式名称(Pattern Name) 问题(Problem) 解决方案(Solution) 效果(Consequence)
分类
创建型模式(Creational Pattern)
单例模式 简单工厂模式 工厂方法模式 抽象工厂模式 原型模式 建造者模式
结构型(Structural Pattern)
适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式
行为型(Behavioral Pattern)
职责链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式
设计原则(附 使用频率低到高 1-5星)
单一职责原则(使用频率 4星)
一个类只负责一个功能领域中的相关职责
开闭原则(使用频率 5星)
软件实体应对扩展开放,而对修改关闭
里氏代换原则(使用频率 5星)
所有引用基类对象的地方能够透明地使用其子类的对象
依赖倒转原则(使用频率 5星)
抽象不应该依赖于细节,细节应该以依赖于抽象
接口隔离原则(使用频率 2星)
使用多个专门的接口,而不使用单一的总接口
合成复用原则(使用频率 4星)
尽量使用对象组合,而不是继承来达到复用的目的
迪米特法则(使用频率 3星)
一个软件实体应当尽可能少地于其他实体发生交互作用
用途
简单来说,设计模式至少有如下几个用途:
- 提高设计和开发效率
设计模式来源于众多专家的经验和智慧,他们是从许多优秀的软件系统中总结出的成功的、能够实现可维护性复用的设计方案,使用这些方案可以避免一些重复性的工作,有助于提高设计和开发效率。
- 提高交流效率
设计模式提供了一套通用的设计词汇和一种通用的形式来方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂。交流通常很耗时、任何有助于提高交流效率的东西都可以为开发人员节省不少时间。无论使用哪种编程语言,做什么类型的项目,甚至对于一个国际化的开发团队,当面对同一个设计模式时,大家的理解并无歧义,因为设计模式是跨语言、跨平台、跨应用、跨国界的。
- 提高系统的灵活性和可扩展性
大部分设计模式都兼顾了系统的可重用性和可扩展性,这使得开发人员可以更好的重用一些已有的设计方案、功能模块甚至一个完整的软件系统,避免做一些重复的设计、编写一些重复的代码。此外,随着软件规模的日益增大,软件寿命的日益变长,系统的可维护性和可扩展性越来越重要,许多设计模式将有助于提高系统的灵活性和可扩展性,在不修改或少修改现有系统的基础上增加、删除或者替换功能模块,如果一点设计模式都不懂,要做到这一点还是很困难的。
- 有助于工作交接
合理使用设计模式并对设计模式的使用情况进行文档化,将有助于别人更快地理解系统。对于离职人员的项目,只要接受人员也懂设计模式,就能够很快理解该项目的设计思路和实现方案,使得后续工作顺路进行。
- 最后一点对初学者很重要,学习设计模式将有助于初学者更加深入地理解面向对象思想