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

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function