文章目录
- 引言
- 一、软件设计固有的复杂性
- 二、设计原则
- 三、前置要求
- 四、设计模式代码案例
-
- [4.1 策略模式](https://blog.csdn.net/weixin_43717839/article/details/141036512)
- [4.2 观察者模式](https://blog.csdn.net/weixin_43717839/article/details/141177035)
- [4.3 装饰者模式](https://blog.csdn.net/weixin_43717839/article/details/141199642)
- [4.4 工厂模式](https://editor.csdn.net/md/?articleId=141202731)
- [4.5 单例模式](https://blog.csdn.net/weixin_43717839/article/details/141230993)
- [4.6 命令模式](https://blog.csdn.net/weixin_43717839/article/details/141231693)
- [4.7 适配器模式与外观模式](https://blog.csdn.net/weixin_43717839/article/details/143136330)
“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。——Christopher Alexander
上面这段话可以说是设计模式为什么会被总结归纳并值得学习的原因——“复用前人的经验”。
你在软件开发过程中遇到的大部分问题,其实你的先辈都曾遇到过,并且已经做了归纳,你只需学习这些经验并实践之就能解决你眼前的困难。
当然,你也可能选择无视它,自己尝试去解决,但最终的效果大概率差强人意,并且在此过程中也浪费了大量时间。而当你撞了无数次南墙再回过头来看它时,可能这时你才会真正领略到它的魅力。
引言
本文主要针对《Head First设计模式》中的经典案例给出相应的C++版本,并对一些模式进行简单归纳,在此过程中并不会针对具体模式做深入分析,因为这些东西已经有人做过了,写本文的初衷也只是我自己想写个笔记简单归纳一下。
模式是在某情景下,针对具体问题给出的某种解决方案。
因此,这里会顺带给出一些案例,你可以先按照自己的想法,代入其中,尝试给出自己的解,之后再来看案例。通过对比,可能会留下更深刻的印象。
一、软件设计固有的复杂性
建筑商从来不会去想给一栋已经建好的100层高的楼房底下再新修一个小地下室——这样做花费巨大且注定要失败。然而令人惊奇的是,软件系统的用户在要求做出类似改变时却不会仔细考虑,而且他们认为只是需要简单编程的事。
回想一下你每天都是为了什么而加班你就会发现:其实软件设计复杂的根本原因无外乎两个字:变化
- 客户需求的变化
- 技术平台的变化
- 开发团队的变化
- 市场环境的变化
- …
各种各样的变化每天都在冲击着你的程序!
如何解决复杂性?
- 分解
人们面对复杂度很高的事情有一个常见的做法:即分而治之,将大问题分解为小问题,将复杂问题分解为多个简单问题。
- 抽象
更高层次来讲,人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。
软件设计的金科玉律:复用!
二、设计原则
(1)依赖倒置原则(DIP)