重构技巧之策略模式优化业务代码
策略模式对业务代码进行重构背景分析
在日常的开发过程中,我们肯定会遇到很多if else
或者switch case
的业务代码,作为维护这类代码的开发者来说,分支太长,影响开发者阅读代码的效率,考虑以下代码
void func()
{
if(...)
{
}
else if(...){
}
else if(...){
}
}
如果func
函数内部还定义了一些局部变量,而且在每个分支中有的使用并修改,有的没有使用,那就呵呵了,妥妥的一股坏代码的味道。
不过可惜,在目前很多公司的很多项目的代码中,这种坏代码肯定数不胜数。
以下介绍设计模式中的策略模式来对业务代码和具体的执行策略进行解耦,这样可以大大简化业务代码维护者的开发过程,提高代码阅读效率进一步提升开发效率。
不多说,直接上代码,重要的解释我已在代码中进行注释解释。
使用策略模式优化业务代码(C++实现)
#include<stdio.h>
template<typename T>
class SingleTon {
private:
SingleTon();
public:
static T* GetInstance();
};
enum class StrategyType {
T1,
T2,
T3
};
class StrategyIntf {
public:
virtual void executeStrategy() = 0;
};
class Strategy1 : public StrategyIntf {
public:
virtual void executeStrategy() override
{
printf("Strategy1: I use my strategy to do somethings. \n");
}
};
class Strategy2 : public StrategyIntf {
public:
virtual void executeStrategy() override
{
printf("Strategy2: I use my strategy to do somethings. \n");
}
};
class StrategyFactory {
public:
StrategyIntf* GetStrategy(StrategyType type)
{
if (type == StrategyType::T1)
{
return SingleTon<Strategy1>::GetInstance();
}
else if (type == StrategyType::T2)
{
return SingleTon<Strategy2>::GetInstance();
}
return nullptr;
}
};
int main()
{
StrategyType type1 = StrategyType::T1;
StrategyType type2 = StrategyType::T2;
StrategyType type = type1;
if (SingleTon<StrategyFactory>::GetInstance()->GetStrategy(type) != nullptr)
{
SingleTon<StrategyFactory>::GetInstance()->GetStrategy(type)->executeStrategy();
}
return 0;
}
template<typename T>
SingleTon<T>::SingleTon()
{
}
template<typename T>
T* SingleTon<T>::GetInstance()
{
static T instance;
return &instance;
}
执行结果
Strategy1: I use my strategy to do somethings.
F:\HappyCoding\Project1\x64\Debug\Project1.exe (process 15672) exited with code 0.
Press any key to close this window . . .
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)