ソフトウェア設計モードには、より実用的な依存関係反転原理(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コードよりも優れた保守性とスケーラビリティを備えています。