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

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值