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++多态的特性,也符合了设计模式中的开闭原则。

注:切记,高内聚,低耦合。高内聚,低耦合。高内聚,低耦合。

原创粉丝点击