c++开闭原则

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21078557/article/details/78257558

注:本博客是根据 * 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++多态的特性,也符合了设计模式中的开闭原则。

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

猜你喜欢

转载自blog.csdn.net/qq_21078557/article/details/78257558