设计模式之依赖倒转原则
2017-08-20 21:47
197 查看
依赖倒转原则
1.定义
A. 高层模块不应该依赖低层模块。两个都应该依赖抽象。B. 抽象不应该依赖细节。细节应该依赖抽象
2.为什么要叫做倒转呢?
面向对象开发时,为了使得常用代码可复用,一般都会把这些代码写成许多的函数库,我们在做项目时调用这些底层的代码函数就可以了。比如我们做的项目大多低层模块。要访问数据库,所以我们就会把访问数据库的代码写成函数,每次做新的项目的时候去调用这些函数,这也叫做高层模块依赖。问题是我们要做新的项目时,发现业务的高层模块是一样的,但是客户却希望用不同的数据库或存储信息方式,这时候就麻烦了,低层与高层模块耦合度太高了,无法复用。3.解决办法
无论是高层模块还是低层模块,他们都依赖于抽象,具体一点就是接口或者抽象类,只要接口是稳定点的,那么任何一个更改都不会影响其他模块。4.实例
依赖倒置原则的核心就是接口,下面我们为车和司机定义两个接口ICar和IDriver,代码如下所示:/// <summary> /// 汽车接口 /// </summary> public interface ICar { void Run(); } /// <summary> /// 司机接口 /// </summary> public interface IDriver { void Drive(ICar car); }
//实现接口
/// <summary> /// 司机A实现接口 /// </summary> public class DriverA : IDriver { public void Drive(ICar car) { car.Run(); } } /// <summary> /// 司机B 实现接口 /// </summary> public class DriverB : IDriver { public void Drive(ICar car) { car.Run(); } } /// <summary> /// BMW车实现汽车的接口 /// </summary> public class BMW : ICar { public void Run() { Console.WriteLine("开的是BMW"); } } public class Benz : ICar { public void Run() { Console.WriteLine("开的是Benz"); } }
客户端代码:
class Program { static void Main(string[] args) { //一辆奔驰车 var benz = new Benz(); //司机A var xiaoming = new DriverA(); //司机A开奔驰 xiaoming.Drive(benz); Console.ReadKey(); } }
5.UML类图
6.注意
每一个类都要尽可能有接口或抽象类和两者都有,也不可过分去生搬硬套依赖倒置原则。变量的显示类型尽量是接口或者抽象类。
尽量不要覆写基类的方法。
结合里氏替换原则使用
7.源码
依赖倒转原则源码相关文章推荐
- 设计模式六大原则(3):依赖倒转原则
- 【设计模式】单一职责原则、开放封闭原则、依赖倒转原则
- 设计模式学习笔记三:开发原则,开放-封闭原则,依赖倒转原则
- 【设计模式】三、单一职责原则,开发-封闭原则,依赖倒转原则
- 设计模式之依赖倒转原则
- 设计模式:5 依赖倒转原则
- 设计模式的依赖倒转原则再理解
- 五 单一职责、开放—封闭、依赖倒转原则——设计模式学习笔记
- 设计模式(5)-----依赖倒转原则
- 设计模式中遵循的原则:单一职责、开发-封闭、依赖倒转
- 设计模式--依赖倒转原则
- 设计模式-依赖倒转原则
- 设计模式中遵循的原则:单一职责、开发-封闭、依赖倒转
- 【架构师之路】-【01设计模式】-04设计原则之依赖倒转原则
- java设计模式_依赖倒转原则
- JAVA设计模式之依赖倒转原则
- 设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)
- 设计模式学习笔记之依赖倒转原则
- 设计模式之单一职责原则、开发-封闭原则和依赖倒转原则
- java设计模式-单一职责模式,依赖倒转原则