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

13 篇文章 0 订阅
11 篇文章 0 订阅

今天和大家聊一个我们平常开发中会经常用,但是自己也意识不到的一个设计模式,就是依赖倒转原则,是不是听起来挺高大上,因为我自己一开始接触这个设计模式时也被它的名字给唬住了,以为这个很晦涩难懂,不过研究过后,后发现这个设计模式在我们的实际开发中用到地方会非常多,也很频繁。

其实设计模式和面向对象结合起来理解就非常容易了,它们的核心思想就是使我们的代码高内聚,低耦合,面向对象的好处大体可以说有4点:可维护、可扩展、可复用、灵活性好。其实设计模式就是依赖和实现面向对象这四个好处的。

我们来看看百度词典对依赖倒转原则的定义:

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

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

 

依赖倒转原则的一个核心原则就是降低耦合性。我们可能要疑惑一点,为什么高层次的模块不应该依赖低层次的模块,我查阅资料后,是有一个李氏代换原则,它讲得是:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里边,把父类都替换成它的子类,程序的行为没有变化,即:子类型必须能够替换掉他们的父类型

我们通过代码给大家展示一下,原谅我的懒惰,我直接从百度百科粘贴了一段例子:


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


通过代码我们可以看到,因为我们依赖了ICar这个抽象类,我们的实体类无论是增加还是修改,都会遵从ICar的原则,而ICar的核心代码我们不会更改。






Good luck!

Write by Jimmy.li








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值