设计模式,即Design Patterns,是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性。
为什么要使用设计模式?根本原因还是软件开发要实现可维护、可扩展,就必须尽量复用代码,并且降低代码的耦合度。设计模式主要是基于OOP编程提炼的,它基于以下几个原则:
开闭原则
由Bertrand Meyer提出的开闭原则(Open Closed Principle)是指,软件应该对扩展开放,而对修改关闭。这里的意思是在增加新功能的时候,能不改代码就尽量不要改,如果只增加代码就完成了新功能,那是最好的。
里氏替换原则
里氏替换原则是Barbara Liskov提出的,这是一种面向对象的设计原则,即如果我们调用一个父类的方法可以成功,那么替换成子类调用也应该完全可以运行。
学习设计模式,关键是学习设计思想,不能简单地生搬硬套,也不能为了使用设计模式而过度设计,要合理平衡设计的复杂度和灵活性,并意识到设计模式也并不是万能的。
分类
GoF把23个常用模式分为创建型模式、结构型模式和行为型模式三类
类型 | 核心思想 | 具体 |
---|---|---|
创建型模式(5) | 如何创建对象,使对象的创建和使用相分离,这样使得两者能相对独立地变换 | 工厂方法 抽象工厂 建造者 原型 单例 |
结构型模式(7) | 如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能,但结构型模式不仅仅简单地使用继承,而更多地通过组合与运行期的动态组合来实现更灵活的功能。 | 适配器 桥接 组合 装饰器 外观 享元 代理 |
行为型模式(11) | 算法和对象间的职责分配。通过使用对象组合,行为型模式可以描述一组对象应该如何协作来完成一个整体任务。 | 责任链 命令 解释器 迭代器 中介 备忘录 观察者 状态 策略 模板方法 访问者 |
https://www.runoob.com/design-pattern/design-pattern-tutorial.html
http://c.biancheng.net/design_pattern/