设计模式----依赖倒置原则

一般情况下进行对象编程,以来都是自上而下的依赖,比如说:

举一个例子:

class Bank {
public:
	virtual void DoThings() = 0;
protected:

private:

};

class SaveEmp : public Bank {
public:
	void DoThings() {
		cout << "存款" << endl;
	}
};

class CarryOverEmp : public Bank {
public:
	void DoThings() {
		cout << "转账" << endl;
	}
};

class PayEmp : public Bank {
public:
	void DoThings() {
		cout << "交费" << endl;
	}
};

void BankWork(Bank *bk) {
	bk->DoThings();
}

int main() {
	Bank* bkSave = new SaveEmp;
	Bank* bkCarry = new CarryOverEmp;
	Bank* bkPay = new PayEmp;

	BankWork(bkPay);
	BankWork(bkSave);

	BankWork(bkCarry);

	system("pause");

	return(0);
}

而依赖倒置原则要求依赖方向向中间的抽象层聚集:

看一个具体的例子:

类图的代码实现:

#include <iostream>

using namespace std;

class HardDisk {
public:
	virtual void work() = 0;
};

class Memo {
public:
	virtual void work() = 0;
};

class Cpu {
public:
	virtual void work() = 0;
};



class Computer {
public:
	Computer(Cpu *cpu, Memo *mem, HardDisk *hard) : m_cpu(cpu), m_memo(mem), m_hard(hard){

	}
public:
	void work() {
		m_cpu->work();
		m_memo->work();
		m_hard->work();
	}
private:
	Cpu* m_cpu;
	Memo* m_memo;
	HardDisk* m_hard;
};

class IntelCpu : public Cpu {
public:
	void work() {
		cout << "我是Intel CPU!" << endl;
	}
};

class XiShuHardDisk : public HardDisk {
public:
	void work() {
		cout << "我是西数硬盘!" << endl;
	}
};

class JSDMem : public Memo {
public:
	void work() {
		cout << "我是金士顿内存!" << endl;
	}
};



int main() {
	HardDisk* _hd = NULL;
	Memo* _mem = NULL;
	Cpu* _cpu = NULL;

	_mem = new JSDMem;
	_hd = new XiShuHardDisk;
	_cpu = new IntelCpu;

	Computer* p = new Computer(_cpu, _mem, _hd);
	p->work();
        delete _hd;
        delete _mem;
        delete _cpu;
        delete _p;
	system("pause");

	return(0);
}

(完)

 

 

深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用的函数表达式 深入理解JavaScript系列(5):强大的原型和原型链 深入理解JavaScript系列(6):S O L I D五大原则之单一职责SRP 深入理解JavaScript系列(7):S O L I D五大原则之开闭原则OCP 深入理解JavaScript系列(8):S O L I D五大原则之里氏替换原则LSP 深入理解JavaScript系列(9):根本没有“JSON对象”这回事 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇) 深入理解JavaScript系列(11):执行上下文(Execution Contexts) 深入理解JavaScript系列(12):变量对象(Variable Object) 深入理解JavaScript系列(13):This Yes this 深入理解JavaScript系列(14):作用域链 Scope Chain 深入理解JavaScript系列(15):函数(Functions) 深入理解JavaScript系列(16):闭包(Closures) 深入理解JavaScript系列(17):面向对象编程之一般理论 深入理解JavaScript系列(18):面向对象编程之ECMAScript实现 深入理解JavaScript系列(19):求值策略 深入理解JavaScript系列(20):《你真懂JavaScript吗 》答案详解 深入理解JavaScript系列(21):S O L I D五大原则之接口隔离原则ISP 深入理解JavaScript系列(22):S O L I D五大原则之依赖倒置原则DIP 深入理解JavaScript系列(23):JavaScript与DOM(上) 也适用于新手 深入理解JavaScript系列(24):JavaScript与DOM(下) 深入理解JavaScript系列(25):设计模式之单例模式 深入理解JavaScript系列(26):设计模式之构造函数模式 深入理解JavaScript系列(27):设计模式之建造者模式 深入理解JavaScript系列(28):设计模式之工厂模式 深入理解JavaScript系列(29):设计模式之装饰者模式 深入理解JavaScript系列(30):设计模式之外观模式 深入理解JavaScript系列(31):设计模式之代理模式 深入理解JavaScript系列(32):设计模式之观察者模式 深入理解JavaScript系列(33):设计模式之策略模式 深入理解JavaScript系列(34):设计模式之命令模式 深入理解JavaScript系列(35):设计模式之迭代器模式 深入理解JavaScript系列(36):设计模式之中介者模式 深入理解JavaScript系列(37):设计模式之享元模式 深入理解JavaScript系列(38):设计模式之职责链模式 深入理解JavaScript系列(39):设计模式之适配器模式 深入理解JavaScript系列(40):设计模式之组合模式 深入理解JavaScript系列(41):设计模式之模板方法 深入理解JavaScript系列(42):设计模式之原型模式 深入理解JavaScript系列(43):设计模式之状态模式 深入理解JavaScript系列(44):设计模式之桥接模式 深入理解JavaScript系列(45):代码复用模式(避免篇) 深入理解JavaScript系列(46):代码复用模式(推荐篇) 深入理解JavaScript系列(47):对象创建模式(上篇) 深入理解JavaScript系列(48):对象创建模式(下篇) 深入理解JavaScript系列(49):Function模式(上篇) 深入理解JavaScript系列(50):Function模式(下篇) 深入理解JavaScript系列(结局篇)">深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用的函数表达式 深入理解J [更多]
SOLID原则中的依赖倒置原则(Dependency Inversion Principle,DIP)是指高层模块不应该依赖底层模块,二者都应该依赖于抽象接口;抽象接口不应该依赖于具体实现,而具体实现应该依赖于抽象接口。 简单来说,DIP原则就是通过接口来解耦高层模块和底层模块之间的依赖关系,使得系统更加灵活、可维护、可扩展。在设计和开发过程中,我们应该遵循DIP原则,尽可能使用接口或抽象类来定义模块之间的依赖关系,而不是直接依赖具体实现类。 举个例子,假设我们正在开发一个电商系统。我们有一个OrderService类,它依赖于一个底层模块的OrderDao类来实现订单数据的持久化。如果我们直接在OrderService类中实例化OrderDao对象,那么OrderService类就与OrderDao类紧密耦合,如果我们需要更换一种不同的数据持久化方案,那么就需要修改OrderService类的代码,违反了开闭原则(Open Close Principle,OCP)。 为了遵循DIP原则,我们可以先定义一个抽象的OrderDao接口,然后让OrderService类依赖于OrderDao接口。底层模块的具体实现类可以实现OrderDao接口,这样就可以实现数据持久化的功能,同时也可以轻松地更换不同的数据持久化方案,不需要修改OrderService类的代码。 总之,DIP原则是设计模式中非常重要的原则之一,它可以帮助我们构建更加灵活、可维护、可扩展的系统。在实际开发中,我们应该尽可能地遵循DIP原则,使用接口或抽象类来定义模块之间的依赖关系,降低模块之间的耦合度,提高系统的可维护性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值