开闭原则
类的改动是通过增加代码实现的,而非修改代码
不好的代码
class BankWorker
{
public:
void saveMoney() {cout<<"存钱"<<endl;}
void moveMoney() {cout<<"转账"<<endl;}
void payMoney() {cout<<"支付"<<endl;}
}
void main()
{
BankWorker *bw = new BankWorker;
bw ->saveMoney();
bw ->moveMoney();
bw ->payMoney();
}
分析:
- 如果添加一个功能,则需要修改代码,违背开闭原则
- 一个类尽可能实现一种功能
修改后的代码
将业务员抽象,做某事,代码如下:
#include <iostream>
using namespace std;
class AbBankWorker
{
public:
virtual void dothings() = 0; //虚函数
};
class saveBanker :public AbBankWorker //1、继承
{
public:
virtual void dothings(){ cout << "存钱" << endl; } //2、虚函数重写
};
class moveBanker :public AbBankWorker
{
public:
virtual void dothings(){ cout << "转账" << endl; }
};
class payforBanker :public AbBankWorker
{
public:
virtual void dothings(){ cout << "支付" << endl; }
};
void howDo(AbBankWorker* bw) //3、框架函数,父类指针指向子类函数,
{
bw->dothings();
}
int main()
{
AbBankWorker* bw = NULL;
bw = new saveBanker;
howDo(bw); //1,2,3实现多态
delete bw;
bw = new moveBanker;
howDo(bw);
delete bw;
bw = new payforBanker;
howDo(bw);
delete bw;
cout << "hello" << endl;
system("pause");
return 0;
}
分析:
- 实现多态,虚函数重写,继承,父类指针指向子类函数
- 每个类实现一种功能,实现业务的分割
- 框架函数具有极强的可扩展性,可以兼容后面人写的代码
扩展性
/*补充一个类*/
class AdvMoveBanker: public moveBanker
{
public:
virtual void dothings(){ cout << "批量转账" << endl; }
};
int main()
{
AbBankWorker* bw = NULL;
bw = new moveBanker;
howDo(bw);
delete bw;
bw = new AdvMoveBanker;
howDo(bw);
delete bw;
cout << "hello" << endl;
system("pause");
return 0;
}
分析:
自己感受去~