c++开闭原则
来源:互联网 发布:一个女人的史诗 知乎 编辑:程序博客网 时间:2024/05/15 05:39
注:本博客是根据 * Easy搞定设计模式 * 而来,如需转载,请注明出处。
开闭原则 之 C++
1、什么是开闭原则?
类的改动是通过增加代码进行的,而不是修改源代码。
2、设计案列
3、对于繁忙的业务员来说,我们实现的代码是这样的。(普通的实现方法)
#include "iostream"using namespace std;/* 如果需要增加新的功能,需要再次添加新的成员函数,会导致类越来越复杂*/class BankWorker{public: void save(){ cout << "save money." << endl; } void transter(){ cout << "transfer money." << endl; } void pay(){ cout << "pay money." << endl; } /* 如果在后期需要增加网银开通、贷款等业务,则需要在此处继续添加函数。 */};int main(){ BankWorker *bw = new BankWorker; bw->pay(); bw->transter(); bw->save(); delete bw; system("pause"); return 0;}
那么,问题来了:对于银行业务员类(BankWorker)的设计就违背了开闭原则。因为如果后期需要添加新的功能,就不得不修改类的源代码。
4、符合开闭原则的思路设计代码
#include "iostream"using namespace std;class BankWorker{public:/*纯虚函数的设计用来抽象银行业务员的业务*/ virtual void doBusiness() = 0;};/*创建存钱的银行员*/class saveBankWorker : public BankWorker{public: virtual void doBusiness(){ cout << "save money." << endl; }};/*创建转账的银行员*/class transferBankWorker : public BankWorker{public: virtual void doBusiness(){ cout << "transfer money." << endl; }};/*创建取钱的银行员*/class payBankWorker :public BankWorker{public: virtual void doBusiness(){ cout << "pay money." << endl; }};/*后期如果需要增加新的功能,只需要再次集成一个新类实现业务函数即可*//*新增办理基金的银行员*/class fundationBankWorker :public BankWorker{ virtual void doBusiness(){ cout << "fundation money." << endl; }};int main(){ /* C++产生多态的3个必要条件 1、有继承,如saveBankWorker继承了BankWorker 2、要有重写,这里的BankWorker类的doBusiness()函数是纯虚函数, 就会被重写,这个函数也称之为接口函数 3、父类指针指向子类对象 */ BankWorker *bw = NULL; //实例化一个父类指针 bw = new saveBankWorker; //将父类指针指向子类对象 bw->doBusiness(); //调用业务函数 delete bw; //释放空间 bw = NULL; //将指针指向空,更加安全 bw = new transferBankWorker; bw->doBusiness(); delete bw; bw = NULL; bw = new payBankWorker; bw->doBusiness(); delete bw; bw = NULL; system("pause"); return 0;}
重点在这里:
C++产生多态的3个必要条件
1、有继承,如saveBankWorker继承了BankWorker
2、要有重写,这里的BankWorker类的doBusiness()函数是纯虚函数,
就会被重写,这个函数也称之为接口函数
3、父类指针指向子类对象
结束:通过开闭原则,我们在增加银行业务员的新的业务时,我们无需修改原来类中的代码,而是通过拓展添加类的方式来实现功能,实际上是利用了C++多态的特性,也符合了设计模式中的开闭原则。
注:切记,高内聚,低耦合。高内聚,低耦合。高内聚,低耦合。
阅读全文
1 0
- 开闭原则(C++)
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- 开闭原则
- VMware 新建虚拟机 弹出“您已输入用户名,客户机操作将保留此用户名”
- Oracle建立表空间和用户
- 【python】python数据结构(一)——线性表:顺序表的实现
- python 协程
- 内部类----细节
- c++开闭原则
- css智能显示隐藏返回顶部按妞
- mapper 学习一
- ios11按钮点击不响应.
- Python中的副本和视图
- 如何理解HTTP协议的 “无连接,无状态” 特点?
- java基本数据类型转换
- shell中 >&2含义
- Docker 启动Mysql