设计模式——依赖倒转原则

A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

B.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

概述

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。

面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度

背景:公司是福特本田公司的金牌合作伙伴,现要求开发一套自动驾驶系统,只要汽车上安装该系统就可以实现无人驾驶,该系统可以在福特和本田车上使用,只要这两个品牌的汽车使用该系统就能实现自动驾驶

代码

public interface ICar

{

void Run();

void Turn();

void Stop();

}

public class BmwCar:ICar

{

public void Run()

{

Console.WriteLine("宝马开始启动了");

}

public void Turn()

{

Console.WriteLine("宝马开始转弯了");

}

public void Stop()

{

Console.WriteLine("宝马开始停车了");

}

}

public class FordCar:ICar

{

publicvoidRun()

{

Console.WriteLine("福特开始启动了");

}

public void Turn()

{

Console.WriteLine("福特开始转弯了");

}

public void Stop()

{

Console.WriteLine("福特开始停车了");

}

}

public class HondaCar:ICar

{

publicvoidRun()

{

Console.WriteLine("本田开始启动了");

}

public void Turn()

{

Console.WriteLine("本田开始转弯了");

}

public void Stop()

{

Console.WriteLine("本田开始停车了");

}

}

public class AutoSystem

{

private ICar icar;

public AutoSystem(ICar icar)

{

this.icar=icar;

}

private void RunCar()

{

icar.Run();

}

private void TurnCar()

{

icar.Turn();

}

private void StopCar()

{

icar.Stop();

}

}

猜你喜欢

转载自blog.csdn.net/qq_34479912/article/details/83278345