博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搬砖方法论:Dependency Inversion Principle(依赖反转原则、DIP原则)
阅读量:4147 次
发布时间:2019-05-25

本文共 609 字,大约阅读时间需要 2 分钟。

定义

DIP原则定义中核心的两句描述为如下两条:

  • 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口(抽象)。
  • 抽象接口(抽象)不应该依赖于具体实现。而具体实现则应该依赖于抽象接口(抽象)。

三条原则

其他原则或者设计模式的解耦手段有很多,DIP的解耦手段就是确定不变,以不变应对需求的多变性,只有不变才是稳定的。

什么是不变?不变就是抽象

  • 代码中多用抽象接口,尽最大可能避免使用具体实现类,且实现类中要一直确定组合优于继承的方式。
  • virtual在设计时就应该是一个没有任何逻辑的空函数。
  • 在抽象设计时,应用Open这类名称代替如OpenInventory含有具体实现细节的名称。

一个小示例

image

如上图所示的依赖关系,View依赖Manager,Manager依赖Plugin,Plugin依赖View。这种依赖关系有2个问题。

  • 这种依赖迁移性(Transitivity)会造成View也依赖于Plugin
  • 这是一种循环依赖,是设计上非常忌讳的事情。

为了打破这种迁移性和循环依赖,我们添加抽象接口IView,让View和Manager都依赖于Iview,这时View和Manager的关系就反转了或者说倒置了。

当然Plugin和View也可以用这种方式进行隔离。对于这种不稳定的依赖(View、数据库、插件等),我们都可以用抽象接口的方式将其隔离,对依赖方向进行反转。


更多文章详见主页:

转载地址:http://tajti.baihongyu.com/

你可能感兴趣的文章
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Android 的source (需安装 git repo)
查看>>
Commit our mod to our own repo server
查看>>
LOCAL_PRELINK_MODULE和prelink-linux-arm.map
查看>>
Simple Guide to use the gdb tool in Android environment
查看>>
Netconsole to capture the log
查看>>
Build GingerBread on 32 bit machine.
查看>>
How to make SD Card world wide writable
查看>>
Detecting Memory Leaks in Kernel
查看>>
Linux initial RAM disk (initrd) overview
查看>>
Timestamping Linux kernel printk output in dmesg for fun and profit
查看>>
There's Much More than Intel/AMD Inside
查看>>
CentOS7 安装MySQL 5.6.43
查看>>
使用Java 导入/导出 Excel ----Jakarta POI
查看>>
本地tomcat 服务器内存不足
查看>>
IntelliJ IDAE 2018.2 汉化
查看>>
基于S5PV210的uboot移植中遇到的若干问题记录(一)DM9000网卡移植
查看>>
Openwrt源码下载与编译
查看>>