设计模式六大原则:依赖倒置原则(二)

一、依赖倒置原则

   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

更多文章:

依赖倒置原则(一)

开闭原则(三)

迪米特原则-带你走进梦幻西游(四)

里氏替换原则(五)

接口隔离原则(六)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值