設計模式-依賴倒轉原則

依賴倒轉原則:依賴於抽象(接口),不依賴於具體的實現類。即針對接口的編程。

一 依賴於具體的類(即不使用依賴倒轉原則時)

#include <iostream>

using namespace std;

class Benz
{
public:
    void run()
    {
        cout<<"奔馳開起來,秀一下!"<<endl;
    }
};

class BMW
{
public:
    void run()
    {
        cout<<"寶馬開起來了,別摸我!"<<endl;
    }
};

class Boss
{
public:
    Boss(Benz *benz){
        this->benz=benz;
    }

    Boss(BMW *bmw){
        this->bmw=bmw;
    }

    void drivebenz(){
        benz->run();
    }

    void drivebmw(){
        bmw->run();
    }

private:
    Benz *benz;
    BMW *bmw;
};  //此時若老闆還想開寶馬,必須還要再有一個BMW *bmw私有變量,還要定義相應的構造函數和方法

int main()
{
    //張老闆開奔馳的業務
    Benz benz;
    Boss Zhang(&benz);
    cout<<"張老闆準備開奔馳了,都閃開!"<<endl;
    Zhang.drivebenz();

    //李老闆開寶馬業務
    BMW bmw;
    Boss Li(&bmw);
    cout<<"李老闆來秀寶馬了,都給我打!"<<endl;
    Li.drivebmw();

    return 0;
}

可以看出如果我們要新建汽車,要重新建立新類。如果人要多開幾輛車,人物類中就會多出很多構造函數,方法與變量。這也不符合開閉原則。

這是很複雜的連接與耦合過程,當人和車越來越多,業務越來越多時,這顯然書寫代碼容易出錯,維護也不容易。

二 依賴於具體的類(依賴倒轉原則)