九 DIP 依赖倒置原则
首先看定义:
1.高层模块不依赖于低层模块,两者都应该依赖于抽象层
2.抽象不能依赖于细节,细节必须依赖于抽象
首先,模块是个抽象的概念,可以大到一个系统中的子系统作为一个模块,也可以是某个子系统中的组件,也可以是某个组件中的某个类。都可以称为模块。
先看第一条:
高层依赖于低层模块:是指高层模块需要调用低层模块的方法
再看第二条:
抽象不能依赖于细节:细节必须依赖于抽象,是指低层模块的方法实现应该是继承于接口,按照接口定义的抽象方法来实现,而不是接口去按照低层模块实现的方法来定义接口
最后:
两者都应该依赖于抽象层是指:高层的模块调用低层方法的依据是按照抽象层所开放出来的接口去调用,而不是抽象层下面具体的方法实现来调用。低层的模块应该去继承或者去实现抽象层的定义的抽象方法。
举例:
<?php
/**
* 驾驶员类
*/
class Player
{
//这里定义了两个相同的方法名,不同参数的方法。这个在java中属于重载,但是PHP中的重载是指的动态的“创建”属性和方法,因此这里只是为了方便理解,PHP并不支持这种重载方式。 /**
* 驾驶福特
* 不好的依赖,Player类的driver方法直接使用了Ford类中的run和stop方法
*/
public function driver(Ford $car)
{
$car->run();//前进
$car->stop();//停止
} /**
* 驾驶奔驰
* 不好的依赖,同上
*/
public function driver(Benz $car)
{
$car->run();
$car->stop();
}
} class Ford
{
public function run()
{
echo 'biu~~';
} public function stop()
{
echo 'duang';
}
} class Benz
{
public function run()
{
echo 'biu~~';
} public function stop()
{
echo 'duang';
}
}
从上面看,Player的两个驾驶方法都是直接使用了具体的类,如果某个类的方法发生了改变,例如类名发生了改变。那么Player类也要做相应的修改。
良好的依赖:
<?php
/**
* 驾驶员类
*/
class Player
{
//fixme 这里定义了两个相同的方法名,不同参数的方法。这个在java中属于重载,但是PHP中的重载是指的动态的“创建”属性和方法,因此这里只是为了方便理解,PHP并不支持这种重载方式。 /**
* 驾驶福特
* 依赖的是ICar接口,Player类不需要知道$car对象是Ford还是Benz,只要知道这两个品牌的车都实现了ICar接口即可
*/
public function driver(ICar $car)
{
$car->run();//前进
$car->stop();//停止
} /**
* 驾驶奔驰
* 不好的依赖,同上
*/
public function driver(ICar $car)
{
$car->run();
$car->stop();
}
}
interface Icar
{
public function run();
public function stop();
}
class Ford implements ICar
{
public function run()
{
echo 'biu~~';
} public function stop()
{
echo 'duang';
}
} class Benz implements ICar
{
public function run()
{
echo 'biu~~';
} public function stop()
{
echo 'duang';
}
}
九 DIP 依赖倒置原则的更多相关文章
- 六大设计原则(三)DIP依赖倒置原则
依赖倒置原则DIP(Dependence Inversion Principle) 依赖倒置原则的含义 高层模块不能依赖低层模块,二者都应该依赖其抽象. 抽象不应该依赖于细节. 细节应该依赖抽象. 什 ...
- DIP依赖倒置原则
一.定义 1.高层模块不应该依赖低层模块,二者都应该依赖抽象 2.抽象不应该依赖于细节.细节应该依赖于抽象 二.层次化 1.简单介绍 结构良好的面向对象架构都具有清晰的层次定义,每个层次通过一个定义良 ...
- 第2章 面向对象的设计原则(SOLID):3_依赖倒置原则(DIP)
3. 依赖倒置原则(Dependence Inversion Principle,DIP) 3.1 定义 (1)要依赖抽象,不要依赖具体的实现类.简单的说就是对抽象(或接口)进行编程,不要依赖实现进行 ...
- 依赖倒置原则(Dependency Inversion Principle)
很多软件工程师都多少在处理 "Bad Design"时有一些痛苦的经历.如果发现这些 "Bad Design" 的始作俑者就是我们自己时,那感觉就更糟糕了.那么 ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...
- 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解
1.概述 所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体.简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模 ...
- 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解(转)
所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体.简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合 ...
- 设计模式值六大原则——依赖倒置原则 (DIP)
依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象. 依赖倒置 ...
- 【面向对象设计原则】之依赖倒置原则(DIP)
依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象.换言之,要针对抽象(接口)编程,而不是针对实现细节编程. 开闭原则( ...
随机推荐
- 正定矩阵(Positive-definite Matrix)
原文链接 正定矩阵是自共轭矩阵的一种.正定矩阵类似复数中的正实数.定义:对于对称矩阵M,当且仅当存在任意向量x,都有 若上式大于等于零,则称M为半正定矩阵.正定矩阵记为M>0.也被称为正定二次型 ...
- java设计模式——享元模式
一. 定义与类型 定义:提供了减少对象数量从而改善应用所需的对象结构的方式,运用共享技术有效地支持大量细粒度的对象 类型:结构性 二. 使用场景 (1) 常常应用于系统底层的开发,以便解决系统的性能 ...
- 一个老鸟发的公司内部整理的 Android 学习路线图 Markdown 版本
jixiaohua发了一篇一个老鸟也发了一份他给公司内部小伙伴整理的路线图.另一份 Android 开发学习路线图.可惜不是MarkDown格式的,所以jixiaohua直接上传的截图,在jixiao ...
- Status bar - iOS之状态栏
(一)设置状态栏显示和隐藏 1.通过 Info.plist 文件增加字段,控制状态栏全局显示和隐藏 在 Info.plist 文件中增加字段 Status bar is initially hidde ...
- lintcode_114_不同的路径
不同的路径 描述 笔记 数据 评测 有一个机器人的位于一个 m × n 个网格左上角. 机器人每一时刻只能向下或者向右移动一步.机器人试图达到网格的右下角. 问有多少条不同的路径? 注意事项 n和 ...
- udp发送广播消息
import socket if __name__ == '__main__': # 创建udpsocket udp_socket = socket.socket(socket.AF_INET, so ...
- 干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾!
1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file # 创建空白文件 rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制) dos2u ...
- Windows Server 2012 搭建DHCP及远程路由访问
1.1 基础环境信息 1.2 DHCP与远程访问服务器角色安装 1.服务器管理器—>仪表板—>添加角色和功能,出现添加角色和功能向导,点击下一步 2.选择安装类型为基于角色或基 ...
- JAVAOOP继承
继承:修饰符 子类 extends 父类{ //类定义部分},不可以使用private和protected修饰类 减少代码量,实现无损替换 必须符合A is a B的关系 宝马 车 狗 ...
- 一行代码搞定checkbox全选和全不选
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...