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

行为模式---模版模式

概念

模版模式是设计模式行为模式的一种,它的核心思想是定义一个算法骨架,将某些步骤提取到到子类中实现。解决当项目中出现多个处理分支,这几个处理分支有重复步骤的时实现代码的复用和扩展。在这种模式下不用修改逻辑结构,使用继承机制中的子类来实现算法不同部分的处理逻辑。

适用场景

1、固定流程,可变步骤:当只向客户端定义一个特定的算法步骤的时候,方便子类能对其进行扩展,同时保证算法结构不变,可使用此算法。

2、代码复用:当多个类的算法除了一些细微的不同,其他处理逻辑一样的时候,为了去除重复代码就可以使用此模式将不同之处在子类中实现。

创建方式

1、分析当前业务逻辑,梳理出算法中的重复逻辑和不同逻辑,并将其抽出到一个类(超类)中。在此类中创建一个函数实现算法的处理步骤。将需要继承在子类中代码函数设置为虚函数。

2、实现所有需要单独处理的子类,并继承超类。在子类中实现需要单独处理的算法逻辑(实现在超类的虚函数上)。

3、完成以上步骤之后在客户端创需要执行的算法类,并调用超类中的算法接口即可完成。

类关系图

在这里插入图片描述

示例代码

#include "MoBanMoShi.h"
int main()
{
    std::cout << "欢迎东哥来到设计模式的世界!\n";
    Manner1* manner1 = new Manner1();
    manner1->algorithm();

    cout << "==========================" << endl;
    Manner2* manner2 = new Manner2();
    manner2->algorithm();
}
#pragma once
#include <iostream>
#include <string>

using namespace std;
//超类
class MainInterface
{
public:
	MainInterface() { }
	~MainInterface() {}
	void algorithm() {
		step1();
		step2();
		step3();
		step4();
	}
	void step1() {
		cout << "步骤1:通用步骤" << endl;
	}
	virtual void step2() {}
	virtual void step3() {}
	void step4() {
		cout << "步骤4:通用步骤" << endl;
	}

};

//具体算法步骤实现
class Manner1 : public MainInterface {
public:
	Manner1() {}
	~Manner1() {}
	void step2() {
		cout << "步骤2:Manner1 步骤" << endl;
	}
	void step3() {
		cout << "步骤3:Manner1 步骤" << endl;
	}
};	

//具体算法步骤实现
class Manner2 : public MainInterface {
public:
	Manner2() {}
	~Manner2() {}
	void step2() {
		cout << "步骤2:Manner2 步骤" << endl;
	}
	void step3() {
		cout << "步骤3:Manner2 步骤" << endl;
	}
};
欢迎东哥来到设计模式的世界!
步骤1:通用步骤
步骤2:Manner1 步骤
步骤3:Manner1 步骤
步骤4:通用步骤
==========================
步骤1:通用步骤
步骤2:Manner2 步骤
步骤3:Manner2 步骤
步骤4:通用步骤

相关文章:

  • pjsip pjsua_media_config 结构体说明
  • CentOS7 服务器安装 Hadoop 和 Hive
  • 数组的介绍
  • ios 小组件和数据共享
  • 浅谈StarRocks数据库简介及应用
  • 插入排序算法的SIMD优化
  • 地下停车场调频广播覆盖:破解地下车库无线广播收听孤岛,技术赋能地下停车场FM调频无线广播覆盖
  • PixelCNN:基于自回归的图像生成模型及其数学原理
  • spring boot3 kafka集群搭建到使用
  • AI大模型测试用例生成平台
  • mysql 到 doris 挪移数据
  • IDEA中链接使用mysql数据库
  • 如何在 React 中实现错误边界?
  • 一场因黄焖鸡引发的技术方案大作战
  • js版本之ES12(2021)、ES13(2022)新特性(九)
  • 封装Axios拦截器实现用户无感刷新AccessToken实践指南
  • 简单创建一个Django项目并配置neo4j数据库
  • Scratch 3.0安装包,支持Win7/10/11、Mac电脑手机平板、少儿便编程的启蒙软件。
  • SQL99 多表查询
  • 成功破解加密机制,研究人员解锁LinuxESXi Akira勒索软件
  • 病重老人被要求亲自取钱在农业银行门口去世?株洲警方介入
  • 宜昌谱写新叙事:长江大保护与高质量发展如何相互成就
  • 时隔3年俄乌直接谈判今日有望重启:谁参加,谈什么
  • 广西北部湾国际港务集团副总经理潘料庭接受审查调查
  • “大鼻子情圣”德帕迪约因性侵被判缓刑,还有新的官司等着他
  • 阿坝州委书记徐芝文已任四川省政府党组成员