本文主要是介绍C++设计模式(李建忠主讲)-1.设计模式简介 总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C++设计模式-设计模式简介
- 课程目标
- GOF设计模式
- 深入理解面向对象
- 软件设计复杂的根本原因
- 解决复杂性的方法
- 使用抽象的好处
- 软件设计的目标
课程目标
- 理解松耦合设计思想
- 掌握面向对象设计原则
- 掌握重构技法改善设计
- 掌握GOF核心设计模式
GOF设计模式
- 历史性著作《设计模式:可复用面向对象软件的基础》,描述了23中经典面向对象设计模式,创立了模式在软件设计中的地位
- 通常说的设计模式都隐含地表示“面向对象设计模式”
深入理解面向对象
- 向下:深入理解面向对象机制
- 封装:隐藏内部实现
- 继承:复用现有代码
- 多态:改写对象行为
- 向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是“好的面向对象设计”
软件设计复杂的根本原因
- 变化
- 客户需求的变化
- 技术平台的变化
- 开发团队的变化
- 市场环境的变化
解决复杂性的方法
-
分解
- 分而治之,将大问题分解为多个小问题,将复杂问题分解成多个简单问题
分解的例子:
对于不同的形状定义不同的类型
在MainForm类中存放不同类型的vector
在OnPaint方法中根据不同的形状去绘画
- 分而治之,将大问题分解为多个小问题,将复杂问题分解成多个简单问题
-
抽象
- 人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。
定义虚基类,在从该虚基类派生出不同的形状,每个形状都有各自的Draw()方法
在MainForm类中只有vector<Shape *>shapeVector,可以放不同形状的指针,注意这里只能有Shape *,而不能用Shape
在OnPaint()方法中实现多态调用
- 人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。
使用抽象的好处
在上面的例子中,当增加新的需求画出圆时,
- 对于第一种写法,需要写一个Class Circle,再在MainForm类中增加一个vector<Circle> circleVector的数据成员,在OnMouseUp()中要push_back相应的Circle对象,再在OnPaint()方法中针对圆写具体的绘制方法。
- 对于第二种写法,同样也需要定义一个Class Circle,它继承自Class Sharp,我们重写它的Draw方法,而对于MainForm类不需要改动,这样明显提高了代码的复用性。
软件设计的目标
- 复用
这篇关于C++设计模式(李建忠主讲)-1.设计模式简介 总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!