軟件裏的依賴倒轉原則

        軟件的設計模式中,有個依賴倒轉原則(Dependence Inversion Principle,DIP),比較實用,下面介紹它。
        一、依賴倒轉原則的定義
        依賴抽象(接口),不要依賴具體的實現(類),也就是針對接口編程。
        二、案例
        1.1 原設計 ver1.1

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
using namespace std;

class Benz
{
public:
	void run(){
		cout << "奔馳開起來了";
	}
};

class BMW
{
public:
	void run(){
		cout << "BMW開起來了";
	}
};

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

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

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

private:
	Benz *benz;
	BMW  *bmw;
};



int main(void)
{
	Benz benz;
	Zhang3 zhang3(&benz);
	zhang3.driveBenz();

	return 0;
}

        1.2 加入了依賴倒轉原則的設計 ver1.2

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
using namespace std;

//---------------- 抽象層 --------------------
class Car
{
public:
	virtual void run() = 0;
};

class Driver
{
public:
	virtual void drive() = 0;
};

//---------------- 實現層 --------------------
class Benz :public Car
{
public:
	virtual void run(){
		cout << "benz run..." << endl;
	}
};

class BMW :public Car
{
public:
	virtual void run(){
		cout << "BMW run..." << endl;
	}
};

class Zhang3 :public Driver
{
public:
	Zhang3(Car *car){
		this->car = car;
	}

	virtual void drive(){
		cout << "Zhang3開車了" << endl;
		car->run();
	}

	Car *car;
};

class Li4 :public Driver
{
public:
	Li4(Car *car){
		this->car = car;
	}

	virtual void drive(){
		cout << "Li4開車了" << endl;
		car->run();
	}

	Car *car;
};

//---------------- 業務邏輯層 --------------------
int main(void)
{

	//讓Zhang3開奔馳
	Car *benz = new Benz;
	Driver *zhang3 = new Zhang3(benz);

	zhang3->drive();

	//讓李4開寶馬
	Car *bmw = new BMW;
	Driver *li4 = new Li4(bmw);
	li4->drive();

	return 0;
}

        版本ver1.2 比ver1.1代碼的可維護性、可擴展性要好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章