💡设计模式
模式不是被发明,而是被发现的。
和代码复用不同,设计模式可以让我们复用前人的(设计)经验。良好的设计是可复用、有弹性的(可维护、可扩展),当我们需要变更时可以使用对现有代码影响最小的方式。
模式不提供代码,而是针对设计问题给出通用的解决方案,需要我们把它们用到特定的应用中。设计模式比库和框架的等级更高,它告诉我们如何组织类和对象来解决某些问题,采纳这些设计并让其匹配我们的特定应用是我们的工作。也就是说,库和框架并不能帮助我们把自己的应用组织得更容易理解、维护、更具弹性,这是设计模式起作用的地方。
设计模式可以应用在应用程序、工具箱、框架中。借助设计模式,用更好的代码结构将一大坨代码拆分成职责更单一的小类,让其满足开闭原则、高内聚松耦合等特性,以此来控制和应对代码的复杂性,从而提高代码的可扩展性。懂得设计模式的好处之一,就是能识别并快速理解我们喜爱的库的设计动机。
模式空间
设计模式在粒度和抽象层次上各不相同。
类
工厂方法
适配器模式(类)
模板方法 解释器模式
对象
抽象工厂 单例模式 建造者模式 原型模式
适配器模式(对象) 代理模式 桥接模式 装饰者模式 门面模式 组合模式 享元模式
观察者模式 策略模式 状态模式 职责链模式 迭代器模式 访问者模式 备忘录模式 命令模式 中介模式
类模式处理类和子类之间的关系,这些关系通过继承来建立,是静态的,在编译时就确定下来了。对象模式处理对象间的关系,这些关系在运行时是可以变化的,更具动态性。从某种意义上来说,几乎所有的模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。
创建型类模式将对象的部分创建工作延迟到了子类,而创建型对象模式则将它延迟到了另一个对象中。结构型类模式使用继承机制来组合类,而结构型对象模式描述了对象的组装方式。行为型类模式使用继承描述算法和控制流,而行为型对象模式则描述了一组对象怎样协作完成单个对象所无法完成的任务。
旨在解耦
创建型设计模式主要解决“对象的创建”的问题,旨在解耦创建和使用代码。
结构型设计模式主要解决“类或对象的组合”的问题,旨在解耦不同功能的代码。
行为型设计模式主要解决“类或对象之间的交互”的问题,旨在解耦不同行为的代码。
工厂模式
对象的创建和使用
观察者模式
观察者和被观察者
策略模式
策略的定义、创建、使用
最后
设计是一种艺术,总是有要折中的地方。但是如果我们遵循那些已经过深思熟虑且经历时间考验的设计模式,会事半功倍。
在自己的设计或已有的应用中,识别能用得上的地方
在学习和应用设计模式的过程中,要时刻思考:模式是如何依赖面向对象基础和设计原则的。
Last updated