ソフトウェアにおける依存関係の逆転の原理

        ソフトウェア設計モードには、より実用的な依存関係反転原理(DIP)があり、以下に紹介します。
        1.依存関係の反転原理の定義は、
        特定の実装(クラス)、つまりインターフェイスのプログラミングではなく、抽象化(インターフェイス)に依存します。
        2.ケース
        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コードよりも優れた保守性とスケーラビリティを備えています。

おすすめ

転載: blog.csdn.net/sanqima/article/details/105328328