【c++】29.设计模式总结
持续更新中…
1.有个通用的使用多态、虚函数 的方法:
- 1.定义一个容器,其中的元素类型是基类,在容器中存入不同子类类型的指针。
- 2.不同子类中定义自己的接口虚函数。
- 3.当遍历该容器时,会根据该容器中的不同类型自动调用不同子类的接口函数。
2.如果增加
一个需求 或者 更改
一个需求很频繁时候
做法是:
- 1.先定义一个基类
Base_A
,在这个基类定义公共的一个接口虚函数
Func()
; - 2.再定义子类
Derived_B
、Derived_C
继承于这个基类Base_A
,在子类Derived_B
、Derived_C
中去具体实现这个需求的虚函数接口Func()
。 - 3.在另一个类
Class_C
中定义一个容器(以vector
容器为例)std::vector<Base_A*> Vct
,通过在容器Vct
中增加
或者修改
要使用的具体子类类型Derived_B
或Derived_C
的对象.
当遍历
该容器Vct
时,会根据该容器中的不同类型自动调用不同子类的接口函数Func()
。
3.区分组合和聚合的方法:生命周期是否一致。一致的是组合,不一致的是聚合。
中间的装饰器是为了提取公共代码???
4.单一职责原则:一个类只有一个变化的原因。
5.依赖倒置原则:应该依赖抽象,而不应该依赖实现细节。(李老师说了一句,这里的依赖指的是编译时依赖???)
6.面向接口编程:最简单的一个表现形式就是,变量要声明成 抽象基类。
只要是new出来的,都是实现细节,是细节依赖,紧耦合(依赖具体类)。Base *A=new Derived();这种做法违背依赖倒置原则。因为Base *A是抽象基类接口,而new Derived()带来的是细节依赖,紧耦合(依赖具体类)。—工厂模式讲解
7.虚函数就是延时到运行时!
虚函数就是把函数的调用延时到运行时确定!
8.C++的多态性分为两种:编译时的多态、运行时的多态; 使用重载来实现编译时的多态,使用虚函数来实现运行时的多态。
如果要用多态,就必须使用指针。
9.为什么多态必须使用指针?
答:参考博客 https://www.cnblogs.com/yinheyi/p/10525543.html
10.工厂模式里面讲到:设计模式不是把变化消灭掉了,而是把变化限定到了一个局部位置。
工厂模式里面就是,类 MainForm
的整体看上去没有依赖任何具体类,他里面实用的都是抽象类。 抽象类A* a = 抽象类B对象指针->createA();
其中 createA()
返回一个 抽象类A
的对象指针。我们通过在MainForm
的构造函数(或者它的接口函数)传入一个B
的具体子类指针,然后把该指针赋值给 抽象类B对象指针
。这样这个B
的具体子类并不在类 MainForm
中定义创造,而是通过参数传进来,就保证了类MainForm
中全部都是抽象的、稳定的
。
李老师的代码为了突出重点,new之后,都没有规范写delete,但是我们实际开发一定要记得写delete。不想写就使用智能指针shared_ptr声明类别变量,然后使用make_shared进行初始化。
11.多态只对于虚函数来说。
对于类中的非虚函数,不能通过 把子类对象赋值给基类对象,或者 把子类指针赋值给基类指针的方式,即,假设子类Derived
有一个func()
普通成员函数,基类Base
没有,不能通过Derived derived; Base base=derived; base.func()
或者 Base *base= new Derived();,base->func();
的方式来调用到子类的func
非虚函数(普通成员函数)。
【c++】29.设计模式总结相关推荐
- 【c++】24.std::function和std::bind详解
1. 可调用对象 查看全文 http://www.taodudu.cc/news/show-494578.html 相关文章: [c++]26.浅谈"事件驱动".select.po ...
- 【自动驾驶】2.车载以太网 - SOME/IP简介
车载以太网 - SOME/IP简介 SOME/IP (Scalable service-Oriented MiddlewarE over IP) 是车载以太网通信引入的一个概念,位于OSI 7层模型的 ...
- BAT 面试Java技术问题总结
2019独角兽企业重金招聘Python工程师标准>>> 前言 此文总结一些校招常见面试题目,供应届生或者实习生参考学习,题目太多,所以只做问题总结,不做答案 PS:此文只是总结技术问 ...
- java 学习思路_Java的学习思路
1 开发环境Java SDK 下载和安装 2 jvm 虚拟机运行原理 3 编程基础 标识符命名规范 4 Java数据类型 5 运算符 6 分支语句(if,switch) 7 循环语句(for,whil ...
- 坦克大战python_Python语言学了没用?那只能说你是真的没有精通了Python语言
[文末有福利] Python的热度一直高居不下,运维,自动化测试,后端开发,机器学习...Python的用武之地真的太多了! "人生苦短,我用Python",对于普通职场人士来说, ...
- 清华学霸用3年编写的Python学习清单共26章,学完托福雅思轻松拿
首先,你了解Python吗? Python是一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言.由于具有丰富和强大的库,又被称为胶水语言,Python 极其容易上手,主要源于Python有极其简 ...
- 清华教授花费1年总结python学习路线共26章,学会它offer拿到手软
首先,你了解python吗? Python是一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言.由于具有丰富和强大的库,又被称为胶水语言,Python 极其容易上手,主要源于Python有极其简 ...
- Vue之Hello World!
目录 1.简介 1.1.Vue介绍 1.2.什么是MVVM模型 1.3.Vue相关 1.4.帮助文档 1.5.VUE GitHub 2.安装 2.1.管理员启动cmd,执行npm install vu ...
- 学python必须得英语精通吗_Python无用武之地?只能说你是真的没有精通Python语言(附教程)...
Python的热度一直高居不下,运维,自动化测试,后端开发,机器学习...Python的用武之地真的太多了! "人生苦短,我用Python",对于普通职场人士来说,Python简单 ...
最新文章
- .net托管环境下struct实例字段的内存布局(Layout)和大小(Size)
- python argvparser_Python命令行参数argv和argparse该如何使用
- 【机器学习基础】前置知识(四):一文掌握Pandas用法
- 法国时隔20年再折桂!“网易云信:世界杯巅峰决战之夜”活动圆满结束!
- python连接linux堡垒机_利用Python Paramiko开发linux堡垒机
- linux 文件 重命名 缓存,linux – rename()原子性和NFS?
- 获取目录文件.bat
- TOP计划猿10最佳实践文章
- numpy—np.repeat、np.roll
- MapReduce在Map端的Combiner和在Reduce端的Partitioner
- 将idea maven项目中webapp文件夹的改为Web Root
- 07 Anykey图像优化及文字头像生成与加载
- iOS接入招商银行一网通
- 我的世界服务器物品展示怎么得,我的世界物品展示框详解攻略 物品展示框怎么做...
- csgo调出参数_CSGO参数设置
- 大陆汽车:汽车电子电器架构的发展及其对车载以太网的影响
- ios 提醒事项和快捷指令,实现进度条功能
- 你知道这几种常用的电阻测试方法吗?2021-08-23
- python 图片生成视频 moviepy_MoviePy
- VUE+element-ui微信充值支付