设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
本文章参考菜鸟教程
设计模式的分类,有下面这三种
这里主要讨论GoF所提出的23种设计模式,可将其分为三种类型:
- 创造型设计模式
- 结构型设计模式
- 行为型设计模式
创造型设计模式
注重完成对象的实例化,相比于直接实例化对象,根据实际情况选择合适的设计模式完成对象的实例化,可以为复杂的业务场景带来更高的灵活性。 创造型设计模式主要包括以下几种:
- 抽象工厂设计模式
- 生成器设计模式
- 工厂方法设计模式
- 原型设计模式
- 单例设计模式
结构型设计模式
结构型设计模式用于指导我们完成对代码的结构划分,如此,代码结构会更加清晰,更易理解,也提高了软件的可维护性。 结构型设计模式主要包括以下几种:
- 适配器设计模式
- 桥接设计模式
- 组合设计模式
- 装饰设计模式
- 门面设计模式
- 享元设计模式
- 代理设计模式
行为型设计模式
行为型设计模式主要用于定义对象之间的通信与流程控制,主要的设计模式都非常注重优化对象之间的数据交互方式。 行为型设计模式主要包括以下几种:
- 职责链设计模式
- 命令设计模式
- 解释器设计模式
- 迭代器设计模式
- 中介者设计模式
- 备忘录设计模式
- 观察者设计模式
- 策略设计模式
- 状态设计模式
- 模板方法设计模式
- 访问者设计模式
如何学习设计模式
- 模式名称是什么?
- 模式类型是什么?是创造型,结构型,还是行为型?
- 模式的目的是什么?(作用是什么?解决了什么问题?)
- 模式的别名是什么?
- 什么情况下使用该模式?
- 该模式的基本示例
- 该模式的UML图是什么样的?是类图还是交互图?
- 都有那些对象在模式中参与活动?列出设计模式中使用的类和对象,并说明他们各自的角色
- 模式中的类和对象是怎么进行交互的?
- 通过应用设计模式能获取什么好处,有哪些坏处?如何权衡?
- 如何实现该模式
- 与该模式相近的设计模式是什么?这几种相近的模式有哪些异同点?
正确看待设计模式
恰当使用设计模式能够提高代码的复用性,但是由于复用性往往会引入封装与间接调用,这些会降低系统性能,增加代码复杂程度。因此,除非设计模式能够帮助我们完成代码的实现或者后续的维护工作,否则没有必要去引入设计模式。 学习设计模式的关键并不在于学习设计模式本身,而是在于识别应用场景与潜在的风险,并将设计模式用之有道,这般,设计模式才能算作得心应手的工具。 在没有必要的情况大可不必去使用设计模式,因为设计模式有可能会牺牲代码的简洁性,而且滥用设计模式多会引入新的问题却没有解决原来的问题。 保持代码的整洁,模块化和可读性,同时不要让各类之间过度耦合