重构(1)if-else

分为五个部分,分别是卫语句、条件合并、表驱动、简单工厂模式、策略模式;

1)卫语句

未优化的代码:

复制代码
int age = 30;
std::string major = "软件工程";
bool bIsChoosePassed = true;

bool isChoosePassed()
{
	bool bIsPassed = false;
	if (age < 35) //卫语句1
	{
		if (major == "软件工程") //卫语句2
		{
			if (bIsChoosePassed == true) //卫语句3
			{
				bIsPassed = true;
			}
			else
			{
				std::cout << "简历未通过筛选!\n";
			}
		}
		else
		{
			std::cout << "专业不相符!\n";
		}
	}
	else
	{
		std::cout << "年龄太大了!\n";
	}
	return bIsPassed;
}

优化的代码:

复制代码
bool isChoosePassed()
{
	bool bIsPassed = false;
	if (age >= 35)
	{
		std::cout << "年龄太大了!\n";
		return bIsPassed;
	}
	if (major != "软件工程")
	{
		std::cout << "专业不相符!\n";
		return bIsPassed;
	}
	if (bIsChoosePassed != true)
	{
		std::cout << "简历未通过筛选!\n";
		return bIsPassed;
	}

	bIsPassed = true;
	return bIsPassed;
}

2)条件合并

未优化的代码:

复制代码
//1.if-else 条件合并
std::string getUserInfo(std::string name, int id, std::string state, bool isActivated)
{
	if (name == "")
	{
		return "invalid data receive!\n";
	}
	if (id <= 0)
	{
		return "invalid data receive!\n";
	}
	if (state == "")
	{
		return "invalid data receive!\n";
	}
	if (!isActivated)
	{
		return "user status is not normal!\n";
	}
	if (state == "") 
	{
		return "user status is not normal!\n";
	}
	return "welcom" + name;
}

优化的代码:

复制代码
std::string getUserInfo(std::string name, int id, std::string state, bool isActivated)
{
	if (name == "" || id <= 0 || state == "")
	{
		return "invalid data receive!\n";
	}

	if (!isActivated || state == "")
	{
		return "user status is not normal!\n";
	}

	return "welcom" + name;
}

3)表驱动

未优化的代码:

优化的代码:

复制代码
//函数指针+表驱动
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
int mul(int a, int b)
{
	return a * b;
}
int division(int a, int b)
{
	assert(b != 0);
	return a / b;
}
// 定义函数指针
using func = int (*)(int, int);

int main()
{
	int res = 0;
	// 这里也可以用map来代替函数指针数组,但是小数据量上实际效果可能还没switch-case快
	func table[4];
	table['+'] = &add;
	table['-'] = &sub;
	table['*'] = &mul;
	table['/'] = &division;
	clock_t startTimes = clock();
	for (int i = 0; i < 1000000; ++i)
	{
		res = table['+'](res, i);
		res = table['-'](res, i);
	}
	clock_t endTimes = clock();
	std::cout << "arrary table cost times : " << (endTimes - startTimes) / CLOCKS_PER_SEC << "ms." << std::endl;
	getchar();
	return 0;
}

4)简单工厂模式

未优化的代码:

优化的代码:

复制代码
#include <iostream>
#include <time.h>

class Oper
{
public:
	Oper()
	{

	}
	~Oper()
	{

	}

public:
	virtual int process(int a, int b) = 0;
};

class Add : public Oper
{
public:
	Add()
	{

	}
	~Add()
	{

	}

public:
	int process(int a, int b)
	{
		return a + b;
	}
};

class Subtraction : public Oper
{
public:
	Subtraction()
	{

	}
	~Subtraction()
	{

	}

public:
	int process(int a, int b)
	{
		return a - b;
	}
};
class multiplication : public Oper
{
public:
	multiplication()
	{

	}
	~multiplication()
	{

	}

public:
	int process(int a, int b)
	{
		return a * b;
	}
};
class division : public oper
{
public:
	division()
	{

	}
	~division()
	{

	}

public:
	int process(int a, int b)
	{
		assert(b != 0);
		return a / b;
	}
};

class Factory
{
public:
	Factory(char symbol): m_oper(nullptr)
	{
		switch (symbol)
		{
		case ' + ':
			m_oper = new Add();

			break;
		case ' - ':
			m_oper = new Subtraction();
			break;
		case ' * ':
			m_oper = new Add();
			break;
		case ' / ':
			m_oper = new Add();
			break;
		default:
			std::cout << "wrong symbol" << std::endl;
			break;
		}
	};
	~Factory() {};

public:

	int Calculator( int a, int b)
	{
		if (m_oper == nullptr)
		{
			return -1;
		}
		return m_oper->process(a, b);
	}

private:
	Oper* m_oper;
};


int main()
{
	int res = 0;
	Factory* factory = new Factory();
	return 0;
}

4)策略模式

未优化的代码:

优化的代码:

相关推荐
Ace_31750887767 小时前
微店商品详情接口深度挖掘:从多接口联动到数据全息重构
大数据·python·重构
Tezign_space2 天前
技术破局:人机协作如何重构内容生产流水线,实现成本与效能的范式转移
人工智能·重构·降本增效·人机协作·内容数字化·内容科技·内容+人工智能
数字孪生家族3 天前
视频孪生与空间智能:重构数字时空认知,定义智能决策新范式
人工智能·重构·空间智能·视频孪生与空间智能
科技测评-阿博3 天前
基于企业知识图谱的B2B金融获客模型:从“流量思维”到“数据工程”的重构
金融·重构·知识图谱
qqxhb4 天前
零基础MCP——第5章编程实战基础(网页、数据分析、调试与重构)
重构·数据挖掘·数据分析·多模态·mcp
老蒋新思维4 天前
创客匠人 2025 高峰论谈(11.22-25):AI 智能体重构创始人 IP 打造与知识变现的管理逻辑
大数据·网络·人工智能·网络协议·tcp/ip·重构·知识付费
"YOUDIG"5 天前
AI重构虚拟都市美学:探索GTA风格照片生成网站的创意狂想与技术内核
人工智能·重构
北京阿法龙科技有限公司7 天前
AR眼镜赋能跨国设备运维:打破空间隔阂,重构高效协作|阿法龙XR云平台
运维·重构·ar
onebound_noah7 天前
电商图片搜索:技术破局与商业落地,重构“视觉到交易”全链路
大数据·前端·网络·人工智能·重构·php
Ace_31750887767 天前
京东商品详情接口终极突破:从多接口联动解析到数据全息重构
python·重构