设计模式六大原则:依赖倒置原则(二)
2016-08-07
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
开学第一天,早上小毛驴吃完早餐,背好书包对父亲说:“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
更多文章: