C++设计模式(李建忠主讲)-1.设计模式简介 总结

2023-11-07 14:59

本文主要是介绍C++设计模式(李建忠主讲)-1.设计模式简介 总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C++设计模式-设计模式简介

  • 课程目标
  • GOF设计模式
  • 深入理解面向对象
  • 软件设计复杂的根本原因
  • 解决复杂性的方法
  • 使用抽象的好处
  • 软件设计的目标

课程目标

  • 理解松耦合设计思想
  • 掌握面向对象设计原则
  • 掌握重构技法改善设计
  • 掌握GOF核心设计模式

GOF设计模式

  • 历史性著作《设计模式:可复用面向对象软件的基础》,描述了23中经典面向对象设计模式,创立了模式在软件设计中的地位
  • 通常说的设计模式都隐含地表示“面向对象设计模式”

深入理解面向对象

  • 向下:深入理解面向对象机制
    • 封装:隐藏内部实现
    • 继承:复用现有代码
    • 多态:改写对象行为
  • 向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是“好的面向对象设计”

软件设计复杂的根本原因

  • 变化
    • 客户需求的变化
    • 技术平台的变化
    • 开发团队的变化
    • 市场环境的变化

解决复杂性的方法

  • 分解

    • 分而治之,将大问题分解为多个小问题,将复杂问题分解成多个简单问题
      分解的例子:
      对于不同的形状定义不同的类型
      图1
      在MainForm类中存放不同类型的vector
      图2
      图3
      图4
      在OnPaint方法中根据不同的形状去绘画
      图5
      图6
  • 抽象

    • 人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。
      定义虚基类,在从该虚基类派生出不同的形状,每个形状都有各自的Draw()方法
      图7
      图8
      在MainForm类中只有vector<Shape *>shapeVector,可以放不同形状的指针,注意这里只能有Shape *,而不能用Shape
      图9
      图10
      图11
      在OnPaint()方法中实现多态调用
      图12

使用抽象的好处

在上面的例子中,当增加新的需求画出圆时,

  • 对于第一种写法,需要写一个Class Circle,再在MainForm类中增加一个vector<Circle> circleVector的数据成员,在OnMouseUp()中要push_back相应的Circle对象,再在OnPaint()方法中针对圆写具体的绘制方法。
  • 对于第二种写法,同样也需要定义一个Class Circle,它继承自Class Sharp,我们重写它的Draw方法,而对于MainForm类不需要改动,这样明显提高了代码的复用性。

软件设计的目标

  • 复用

这篇关于C++设计模式(李建忠主讲)-1.设计模式简介 总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/364420

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数