A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2018-1-5 14:28 编辑

【黑马程序员】依赖倒转原则

今天和大家聊一个我们平常开发中会经常用,但是自己也意识不到的一个设计模式,就是依赖倒转原则,是不是听起来挺高大上,因为我自己一开始接触这个设计模式时也被它的名字给唬住了,以为这个很晦涩难懂,不过研究过后,后发现这个设计模式在我们的实际开发中用到地方会非常多,也很频繁。
其实设计模式和面向对象结合起来理解就非常容易了,它们的核心思想就是使我们的代码高内聚,低耦合,面向对象的好处大体可以说有4点:可维护、可扩展、可复用、灵活性好。其实设计模式就是依赖和实现面向对象这四个好处的。
我们来看看百度词典对依赖倒转原则的定义:
A:高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
B:抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

依赖倒转原则的一个核心原则就是降低耦合性。我们可能要疑惑一点,为什么高层次的模块不应该依赖低层次的模块,我查阅资料后,是有一个李氏代换原则,它讲得是:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里边,把父类都替换成它的子类,程序的行为没有变化,即:子类型必须能够替换掉他们的父类型
我们通过代码给大家展示一下,原谅我的懒惰,我直接从百度百科粘贴了一段例子:
[Java] 纯文本查看 复制代码
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的核心代码我们不会更改。

如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
     黑马程序员济南中心联系电话:0531-55696830

1 个回复

倒序浏览
我来占层楼啊  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马