关于设计模式
一些思考
如果你只掌握面向对象的思想和一门面向对象语言,面对纷繁复杂的业务需求感到杂乱无章,难以下手;如果你面对各种应用框架,只知道使用却不知其思想来源,那对框架的理解也很难深入。
在我看来,设计模式像是一种面向对象设计的“范式”,用俗话说就是“套路”。如果面向过程的学习过程是“C语言-数据结构和算法”,那么面向对象的学习过程应该是 “一门OO语言-设计模式-框架”的路径。因此设计模式起到了承上启下的关键作用。
设计模式定义
参考维基百科:在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。并非所有的软件模式都是设计模式,设计模式特指软件“设计”层次上的问题。还有其他非设计模式的模式,如架构模式。同时,算法不能算是一种设计模式,因为算法主要是用来解决计算上的问题,而非设计上的问题。
这个定义说明了软件设计-软件架构的平等地位,同时和“算法”做了区分。得出结论:设计,计算和架构是三个不同的问题。
设计模式的分类
本文参考GoF等著作,共涉及三大类23种设计模式。
分别是:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式C++代码实现
“talking is cheap, show me your code.” click here!
需要说明两点:
1.设计模式不依赖于某种语言。本人选用C++实现,其他面向对象语言则同理。
2.代码学习参考了众多书籍,在此鸣谢GoF及一些其他经典文章和书籍。