¶引言
“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”
– Christopher Alexander
设计模式是一组通用的模板,可以在任何一种面向对象的语言中实现,而已知的设计模式有23种。想要学好编程,就应该学会这些设计模式,让你的代码更鲁棒。那么,现在就开始我们的设计模式的学习…
¶什么是设计模式?
¶定义
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。可以说,设计模式大牛总结的编写代码的模板。
¶目的
为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。
¶设计要素[1]
¶模式名称(pattern name)
一个助记名,有见名知意的效果,通常用一两个词描述模式的问题、解决方案和效果。
¶问题(problem)
应该在何时使用设计模式(设计模式对应的需要解决的现实工程问题),也就是应用场景。
¶解决方案(solution)
一套解决对应工程问题的解决流程。设计模式就是一个模板,可以应用于一类问题,它是从具体工程问题中抽象出来的对问题的描述和怎样将类与对象相互组合来解决问题。
¶效果(consequences)
设计模式应用后能产生的效果及使用模式应权衡的问题。
¶设计原则[2]
设计模式需要遵循设计原则,才能是一个通用的设计模式。
- 开闭原则(Open Close Principle)
对扩展开放,对修改关闭。可以向外扩展,不能修改已存在的。 - 里氏代换原则(Liskov Substitution Principle)
只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。 - 依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。 - 接口隔离原则(Interface Segregation Principle)
使用多个隔离的接口来降低耦合度。 - 迪米特法则(最少知道原则)(Demeter Principle)
一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。 - 合成复用原则(Composite Reuse Principle)
原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。 - 单一职责原则 (Single responsibility principle)
一个类应该只有一个发生变化的原因(职责)
¶设计模式分类
¶以目的准则分类
模式的用途(模式是用来干什么的)
- 创建型模式
与对象的创建有关。包括5中设计模式,分别为: 工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 - 结构型模式
用于处理类和对象的组合。包括7中设计模式,分别为: 适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 - 行为型模式
描述类和对象的交互和分配职责。包括11中设计模式,分别为: 策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式。解释器模式。
¶以范围准则分类
模式是用于类还是用于对象(对象<类)
- 类模式
处理类和子类之间的关系,这些关系通过继承建立,是静态的,编译时就已经定下了。类模式的设计模式有创建型模式中的工厂方法模式,结构型中的适配器模式以及行为型中的模板方法模式和解释器模式。 - 对象模式
处理对象间的关系,这些关系在运行时是变化的,是动态的。
¶设计模式之间的关系
- 创建型类模式将对象的创建工作延迟到子类。
- 创建型对象模式将对象的创建工作延迟到另一个对象中。
- 结构型类模式使用继承机制组合类。
- 结构型对象模式描述对象的组装方式。
- 行为型模式使用继承描述算法和控制流。
- 行为型对象模式描述一组对象怎样协作完成单个对象无法完成的任务。
¶所有设计模式
¶创建型模式
¶特点
主要关注怎么创建对象。创建对象的工作由相关创建者进行创建。
创建型模式包括类创建模式(工厂方法模式)和对象创建模式(其他模式)
¶创建型的设计模式
- 单例模式
- 原型模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
¶结构型模式
¶行为型模式
¶自言自语
刚开始学设计模式,也不知道如何学,只有先找网上资源看看,自己再总结一下。这里只是列出了设计模式的概览,还没有深入了解。等之后再具体看看这些设计模式,争取吃透。