一、依赖倒置原则
1.1 定义
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
1.2 代码示例
开学第一天,早上小毛驴吃完早餐,背好书包对父亲说:“dad,我今天想坐小汽车去幼儿园上课”;于是dad开始准备小汽车和小汽车跑动的方法。
//
// 依赖倒置原则.cpp
// c++
//
// Created by 刘龙玲 on 16/5/1.
// Copyright © 2016年 liulongling. All rights reserved.
//
#include <iostream>
using namespace std;
class Car
{
public:
void run()
{
cout<<"开车送孩子上学"<<endl;
}
};
class Father
{
public:
void goSchool(Car car)
{
car.run();
}
};
int main()
{
Father fa;
Car car;
fa.goSchool(car);
}
控制台: +------------------------------------------------------------------+ 开车送小毛驴上学 +------------------------------------------------------------------+
第二天需求发生了变化,毛驴对爸爸说:“dad,今天毛驴不想坐小汽车去幼儿园了,我的幼儿园小朋友都是坐自行车去上学的,我也要做自行车”;dad呆住了,他办不到。因为他的行为方法只有一个参数是car而你要bike,oh,no~。于是dad开始动脑筋,想着要不我新加个自行车进来。又想做不对,万一下次毛驴又想坐别的交通工具上课,顿时,他有主意了,汽车,自行车都属于交通工具,我只要引入一个交通工具抽象类,然后让他们去实现run方法,这样就不用不断的修改Father类了。
class Vehicle
{
public:
virtual void run() = 0;
};
这样使Father类与Vehicle发生依赖关系,而汽车,自行车都属于交通工具,他们各自实现了Vehicle接口。
//
// 依赖倒置原则.cpp
// c++
//
// Created by 刘龙玲 on 16/5/1.
// Copyright © 2016年 liulongling. All rights reserved.
//
#include <iostream>
using namespace std;
class Vehicle
{
public:
virtual void run() = 0;
};
class Car:public Vehicle
{
public:
virtual void run()
{
cout<<"开车送孩子上学"<<endl;
}
};
class Bike:public Vehicle
{
public:
virtual void run()
{
cout<<"骑自行车送孩子上学"<<endl;
}
};
class Father
{
public:
void goSchool(Vehicle* v)
{
v->run();
}
};
int main()
{
Father fa;
Vehicle* v = new Car;
fa.goSchool(v);
v = new Bike;
fa.goSchool(v);
}
这样修改后无论孩子有什么新的要求,你都不用修改Father类。
我是小毛驴,一个游戏人,我的梦想是世界和平。原文地址:http://blog.csdn.net/liulongling/article/details/51290113
更多文章: