分为五个部分,分别是卫语句、条件合并、表驱动、简单工厂模式、策略模式;
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['-'] = ⊂
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)策略模式
未优化的代码:
优化的代码: