当前位置: 首页 > news >正文

《C++设计模式》——行为型

前言

行为型模式是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。

Interpreter(解释器)

Template Method(模板方法)

GOOD:把不变的代码部分都转移到父类中,将可变的代码用 virtual 留到子类重写。

Chain of Responsibility(责任链)

Command(命令)

Iterator(迭代器)

Mediator(中介者)

Memento(备忘录)

Observer(观察者)

State(状态)

Strategy(策略)

定义算法家族,分别封装起来,让它们之间可以互相替换,让算法变化,不会影响到用户
GOOD:适合类中的成员以方法为主,算法经常变动;简化了单元测试(因为每个算法都有自己的类,可以通过自己的接口单独测试。
策略模式和简单工厂基本相同,但简单工厂模式只能解决对象创建问题,对于经常变动的算法(方法)应使用策略模式。
BUG:客户端要做出判断。
在这里插入图片描述

strategy.h

#ifndef CLION_TEST_STRATEGY_H
#define CLION_TEST_STRATEGY_H// 策略基类
class COperation {
public:int m_nFirst;int m_nSecond;virtual double GetResult() {double dResult = 0;return dResult;}
};// 策略具体类——加法类
class AddOperation : public COperation {
public:AddOperation() {}AddOperation(int a, int b) {m_nFirst = a;m_nSecond = b;}double GetResult() final {return m_nFirst + m_nSecond;}
};class Context {
private:COperation *op;
public:Context(COperation *temp) {op = temp;}double GetResult() {return op->GetResult();}
};#endif //CLION_TEST_STRATEGY_H

main.h

#include <iostream>
#include "strategy.h"using namespace std;int main() {system("chcp 65001");// 简单工厂模式int a = 1;int b = 2;// 策略模式char c = '+';switch (c) {case '+':Context* context = new Context(new AddOperation(a,b));cout<<context->GetResult()<<endl;break;default:break;}return 0;
}

策略模式与工厂结合

将实例化具体的类过程移至到Context对象的引用中。
strategy.h

  // 策略与工厂结合Context(char cType) {switch(cType) {case '+': op = new AddOperation(3,8);break;default:op = new AddOperation();break;}}

main.h

int main()
{int a,b;cin>>a>>b;Context *test=new Context('+');cout<<test­>GetResult()<<endl;return 0;
}

Visitor(访问者)

后记

http://www.lryc.cn/news/158505.html

相关文章:

  • 什么是原生IP?原生IP与住宅IP有何区别?
  • element-plus 表格-自定义样式实现
  • MVCC
  • 你不知道的JavaScript---对象
  • C++项目实战——基于多设计模式下的同步异步日志系统-①-项目介绍
  • 解决Oracle数据库中日期格式不识别的问题
  • 一生一芯13——linux设置环境变量
  • CSS笔记(黑马程序员pink老师前端)定位
  • C高级Linux指令和shell脚本
  • 449. 序列化和反序列化二叉搜索树
  • DockerCompose部署es和kibana
  • windows系统docker中将vue项目网站部署在nginx上
  • LabVIEW利用纳米结构干电极控制神经肌肉活动
  • 使用PHPStudy在本地快速建立网站并实现局域网外访问(无公网IP)
  • Java工具类--http请求-post
  • HTTP【总结】
  • 统计子岛屿
  • docker介绍、安装及卸载
  • 【EI/SCOPUS会议征稿】第二届环境遥感与地理信息技术国际学术会议(ERSGIT 2023)
  • LabVIEW应用开发——LabVIEW2019保姆级介绍、安装、第一个程序
  • 《TCP/IP网络编程》阅读笔记--Timewait状态和Nagle算法
  • Python常用IDE选择与安装
  • Docker从认识到实践再到底层原理(三)|Docker在Centos7环境下的安装和配置
  • Jmeter系列-Jmeter面板介绍和常用配置(2)
  • 2023高教社杯数学建模D题思路分析 - 圈养湖羊的空间利用率
  • 自动部署工具PM2
  • 软考高级系统架构设计师系列案例考点专题三:数据库系统考点梳理及精讲
  • 【 XXL-JOB】 XXL-JOB任务分片
  • RK3568开发笔记-SATA接口调试
  • 异步编程 - 09 Spring框架中的异步执行_@Async注解异步执行原理源码解析