拜读大牛秦小波所著的《设计模式之禅》,从中学习到的做一个记录,其中所涉及的思想,定义等版权属于秦小波先生,个人纯属学习!
一、依赖倒置定义:High level moduls should not depend upon level modules.Both should depend upon abstractions.Abstractions should not depend upon deatils.Details should depend upon abstractions.
主要包括三层含义:
1、高层模块不应该依赖低层模块,两者都应该依赖其对象;
2、抽象不应该依赖细节;
3、细节应该依赖抽象;
二、代码
ICar.h
#pragma once
class ICar
{
public:
ICar();
~ICar();
virtual void Run();
private:
};
Benz.h
#pragma once
#include "ICar.h"
class Benz:public ICar
{
public:
Benz();
~Benz();
void Run();
private:
};
Benz.cpp
#include "stdafx.h"
#include "Benz.h"
#include <iostream>
using std::cout;
using std::endl;
Benz::Benz()
{
}
Benz::~Benz()
{
}
void Benz::Run()
{
cout<<"奔驰汽车开始运行..."<<endl;
}
BMW.h
#pragma once
#include "ICar.h"
class BMW:public ICar
{
public:
BMW();
~BMW();
void Run();
private:
};
BMW.cpp
#include "stdafx.h"
#include "BMW.h"
#include <iostream>
using std::cout;
using std::endl;
BMW::BMW()
{
}
BMW::~BMW()
{
}
void BMW::Run()
{
cout<<"宝马汽车开始运行..."<<endl;
}
IDriver.h
#pragma once
#include "ICar.h"
class IDriver
{
public:
IDriver();
~IDriver();
virtual void drive(ICar *car);
};
IDriver.cpp
#include "stdafx.h"
#include "Idriver.h"
IDriver::IDriver()
{
}
IDriver::~IDriver()
{
}
void IDriver::drive(ICar *car)
{
car->Run();
}
场景
int _tmain(int argc, _TCHAR* argv[])
{
IDriver *zhangSan = new IDriver();
ICar *benz = new Benz();
zhangSan->drive(benz);
delete zhangSan;
zhangSan = NULL;
IDriver *liSi = new IDriver();
ICar *bwm = new BMW();
liSi->drive(bwm);
delete liSi;
return 0;
}
浙公网安备 33010602011771号