技术标签: 设计模式 依赖倒转原则 高内聚,低耦合 java
今天和大家聊一个我们平常开发中会经常用,但是自己也意识不到的一个设计模式,就是依赖倒转原则,是不是听起来挺高大上,因为我自己一开始接触这个设计模式时也被它的名字给唬住了,以为这个很晦涩难懂,不过研究过后,后发现这个设计模式在我们的实际开发中用到地方会非常多,也很频繁。
其实设计模式和面向对象结合起来理解就非常容易了,它们的核心思想就是使我们的代码高内聚,低耦合,面向对象的好处大体可以说有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
高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转(倒置)的中心思想是 面向接口编程 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架 构比以细节为基础的架构要稳定的多。在 java 中,抽象指的是接口或抽象类,细节就是具体的实现类 使用 接口或抽象类的目的是制定好 规范,而不涉及任何具体的操作,把 展现...
4. 依赖倒转原则(面向接口编程) 4.1 描述 上层和细节都只依赖抽象类或者接口类。 将代码分了三层:上层,细节和接口层 4.2 优点 1)减少类之间的耦合性,减少上层和细节的依赖 2)提高系统稳定性 4.3 注意 依赖倒转就是面向抽象、面向接口编程。 ...
依赖倒置原则的包含如下的三层含义: 就是面向接口编程,采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。 举个例子,小明开奔驰车。 我们需要两个底层模块,司机类,奔驰车类。以及调用其二者的高层模块 正常来写是这样子的: Program.cs: Driver.cs Benzn.cs 以上的代码就完成了要求。 但是现在又买了一辆车,奥迪。又请了...
基本介绍 依赖倒转原则(Dependence Inversion Principle)是指: 细节应该依赖抽象 依赖倒转(倒置)的本质是面向接口编程 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。在Java中,抽象指的是接口或抽象类,细节就是具体的实现类 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成 反例: 如上M...
文章目录 传统的面向过程的程序设计使高层次的模块自顶向下逐级依赖于低层次的模块,中间层和高层模块之间存在较高的耦合度,这样如果其中一个模块发生变化,整个业务就会受影响。 例如下面的例子 现在,应当使高层模块只依赖于中间的抽象层,底层的实现也只依赖于中间的抽象层,达到底层和上层解耦的目的 这样,当银行添加新业务的时候,只要派生出新的员工即可,不会影响底层模块的函数调用...
设计模式原则 - 依赖倒转原则 寂然 大家好,我是寂然~,本节课呢,我来给大家介绍设计模式原则之依赖倒转原则,话不多说,我们直接进入正题,老规矩,首先带大家了解一下依赖倒转原则的官方定义,并作一个解释,然后我们通过案例代码来具体分析 官方定义 依赖倒转原则,又称依赖倒置原则(Dependence Inversion Principle),又称DIP原则,官方定义为: High level mo...
书接上回,本篇继续讲一下设计模式六大原则(有些书认为是7大原则) 原则定义 1>高层次的模块不要依赖低层次的模块,都应该依赖于抽象 2>抽象不应该依赖于具体,而具体要依赖于抽象 看懂上面的定义得提前理解几个词:高层次模块,低层次模块, 抽象,具体 高层次模块:也叫上层代码,一般可以认为调用方。以系统三层结构(表现层,业务层,持久层)为例子,表现层相对于业务层来说,就是上层,业务层相对于...
什么是依赖倒转原则 中心思想是面向接口的编程 使用接口或者抽象类的目的是指定好规范,并不设计具体的实现,具体的细节交给实现类去完成 例子 反例 结果: 邮件信息:hello,world 问题分析: 实现起来很简单 但是Person类的receive()方法中接受的是Email这个具体的类,如果此时我要接收微信,qq等其他类型,还需要receive(Wechat wechat),receive(QQ...
一、介绍 依赖倒转原则是指: 1)高层模块不应该依赖低层模块,二者都应该依赖其抽象。 2)抽象不应该依赖细节,细节应该依赖抽象。 3)依赖倒转原则的中心思想是面向接口编程。 4)依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比细节为基础的架构要稳定的多。 也就是说,我们在进行编程的时候,我们要专注于抽象类和接口,以抽象类和接口为基础搭建软件的框架...
Uint8Array 声明 比如说,我们想将其中的16,17,0,0拿出来组成一个新的uint8array,那有什么简单的办法,首先看官方api uint8array 有一个方法 subarray 方法 (Uint8Array) 为此数组获取 ArrayBuffer 存储的新 Uint8Array 视图。 看下面代码 这样大家以为这就是一个新的uint8array数组了,是自己想要的东西 但是看下...