设计模式概述
设计模式是软件开发过程中解决特定问题的一些经验总结。
为什么要学习设计模式
记得读研时,啃了几天GoF的《设计模式:可复用面向对象软件的基础》,觉得一头雾水,那时的项目经验比较少,没觉得这么做有什么道理。
后来代码撸多了,觉得到了瓶颈,就又拾起了设计模式。
再次看设计模式,发现目的是好的,但抽象能力不是看几天设计模式就立马提高的,实际上未必遇到这些特定问题,设计模式对自己的代码改善是一个潜移默化的过程。
但有一个意外的优点,理解开源代码结构容易了,很多框架用了大量设计模式。
设计模式的四个要素:
1. 模式名称
一般根据模式的问题、解决方案、功能和效果来命名。方便程序员之间交流设计思想。
2. 问题
问题(Problem)描述了在什么情况下使用该模式。他可能描述了特定的设计问题,比如怎样用对象表示算法。
描述了导致不灵活设计的类或对象结构,有时还包括使用该模式必须满足的一系列先决条件。
3. 解决方案
模式问题的解决方案(Solution)描述设计的组成成分、它们之间的相互关系及各自的职责和协作方式。
4. 效果
描述了模式的应用效果以及使用该模式应该权衡的问题,即模式的优缺点。
设计模式分类
按照目的分:
1.创建型模式:用于描述“怎样创建对象”。常见有单例模式、(简单工厂模式)工厂方法模式、抽象工厂模式、建造者模式、原型模式5 种创建型模式。
2.结构型模式:描述对象的接口和拼接,GoF 中提供了代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式 7 种结构型模式。
3.行为型模式:用于描述类或对象之间怎样相互协作责。有模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式等 11 种行为型模式。
如何学习设计模式:
1.了解设计模式的六大原则。
2.对设计模式整体概念有个简单的了解,知道分类,快速刷一遍23种设计模式。
3.对感兴趣的设计模式精刷,然后再刷同类和相似的模式。
4.刷到某种设计模式,可以以模式名百度下,看不同人对这种模式的介绍。
说实在的,好多介绍设计模式的文章,用的例子太简单,和实际项目差别太大,所以多刷几个作者的。
5.看开源代码如何用这种设计模式的。
6. <<Head First 设计模式>> 比GoF的趣味性更高,可以先看Head First 设计模式。
7.多动手。项目中多思考。多看别人优秀设计。
最后,不要过度设计,看过新人一个简单任务的python程序写得巨复杂无比,用了继承多态,用编辑器查看时总就跳到基类,给自己增加负担。
23种设计模式只是代码设计中特定情景都模版,不要神化,要掌握的是思想,而不是什么都硬要往设计模式上套。
Simple is Best。
参考资料:
《设计模式:可复用面向对象软件的基础》
《Head First 设计模式》