设计原则——依赖倒置原则
1.全称
- Dependence Inversion Principle
- 缩写为:
DIP
2.解释
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象
- 其核心思想是:要面向接口编程,不要面向实现编程。
3.接口隔离原则的实现方法
1.每个类尽量提供接口或抽象类,或者两者都具备。
2.变量的声明类型尽量是接口或者是抽象类。
3.任何类都不应该从具体类派生。
4.使用继承时尽量遵循里氏替换原则。
5.依赖倒置中的面向抽象类编程,核心思想就是多态,
python
语言,天生就是多态,所有类在实例化时,才会根据其属性被创建为具体的对象;而在Java
、Go
等语言中,类一旦被定义就被创建成一个具体的对象,所以在python中依赖倒置原则很常见,也很容易实现
1.场景:张三开车
- 1.张三开宝马
- 2.李四开奔驰
- 3.张三开奔驰
class Car:def __init__(self, branch):self.branch = branchdef run(self):print(f"{self.branch}汽车正在柏油路面疾驰")class Driver:def __init__(self, name, car: Car):self.name = nameself.car = cardef drive(self):print(f"{self.name}开着{self.car.branch}")self.car.run()if __name__ == '__main__':c = Car("宝马")d = Driver("张三")d.drive(c)b = Car("奔驰")d.drive(b)d = Driver("李四")d.drive(c)
张三开着宝马
宝马汽车正在柏油路面疾驰
张三开着奔驰
奔驰汽车正在柏油路面疾驰
李四开着宝马
宝马汽车正在柏油路面疾驰
2.Go语言实现(静态语言)
- 换个人就要增加个类
- 换个车就要增加个类
package mainimport ("fmt"
)// ----------------------------抽象层----------------------------
type Car interface {Run()
}type Driver interface {Drive(car Car)
}// ----------------------------实现层----------------------------
// 如果新来一个司机,只需要增加一个司机实体(不会对原有类进行修改)
// 如果新增一个品牌的车,只需要增加一个品牌实体(不会对原有类进行修改)
type FtCar struct {}func (f *FtCar) Run() {fmt.Println("丰田车开起来了...")
}type BmCar struct {}func (f *BmCar) Run() {fmt.Println("宝马车开起来了...")
}type BzCar struct {}func (f *BzCar) Run() {fmt.Println("奔驰车开起来了...")
}type Zh3 struct {}func (z *Zh3) Drive(car Car) {car.Run()
}func main() {// ----------------------------业务层----------------------------// 1.new一个司机张三zs := &Zh3{}// 2.new一个奔驰汽车car := &BzCar{}// 3.把汽车交给张三驾驶zs.Drive(car)
}
多态
:是静态语言和动态语言很大的一个区别
4.依赖、倒置原则的作用
1.依赖倒置原则可以降低类间的耦合性。
2.依赖倒置原则可以提高系统的稳定性。
3.依赖倒置原则可以减少并行开发引起的风险。
4.依赖倒置原则可以提高代码的可读性和可维护性。
设计原则——依赖倒置原则相关推荐
- 设计模式之禅之六大设计原则-依赖倒置原则
依赖倒置原则 依赖倒置原则的原始定义是: ● 高层模块不应该依赖低层模块,两者都应该依赖其抽象; ● 抽象不应该依赖细节; ● 细节应该依赖抽象. 那什么是抽象?什么又是细节呢? ---->在J ...
- 软件设计的七大原则 --开闭原则 里氏替换原则 依赖倒置原则
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 这 7 种设计原则是软件设计 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- Java 七大设计原则 - 依赖倒置原则/面向接口编程
一.什么是依赖倒置原则(Dependence Inversion Principle, DIP) ? - 面向接口编程(Object-Oriented Design, OOD) (1) 高层模块与低 ...
- 【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )
文章目录 一.依赖倒置原则简介 二.面向实现编程代码示例 ( 反面示例 ) 1.顾客类 2.测试类 三.依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 ) 1.顾客类 2 ...
- java设计模式之设计原则②依赖倒置原则
定义: ⑴高层模块不应该依赖低层模块,二者都应该依赖其抽象 ⑵抽象不应该依赖细节,细节应该依赖抽象 ⑶针对接口编程,不要针对实现编程 我们通过抽象包括使用接口或者抽象类可以使各个类或模块的实现彼此独立 ...
- 设计模式--6大原则--依赖倒置原则
依赖倒置原则(Dependence Inversion Principle),简称DIP 定义 High level modules should depend upon low level modu ...
- SOLID原则-依赖倒置原则
简介 前面我们已经介绍了 SRP ,单一职责原则 OCP,开闭原则 LSP,里式替换原则 ISP,接口隔离原则 今天来详解依赖倒置原则. 作为一个Java程序员,你可能听说过代码耦合以及被告知应避免代 ...
- 5.里氏代换原则依赖倒置原则
里氏代换原则(LSP):子类型必须能够替换掉它们的父类(子类可以看做父类来使用) 依赖倒置原则:高层模块不应该依赖于低层模块,两个都应该依赖抽象:抽象不应该依赖细节,细节应该依赖抽象.
最新文章
- protoc支持c_protoc 命令参数
- mongoDB的监控工具
- timestamp类型设置默认时间
- Adaboost(自适应提升树)算法原理
- 树状数组 java_算法模板之树状数组
- 2012年1月份第2周51Aspx源码发布详情
- 运营商回应 5G 商用放号推迟;iPhone 或推出渐变色;GoLand 2019.2.1 发布 | 极客头条...
- C++学习总结(1)
- STM32-实现us延时
- Namenode服务挂
- 不懂精简指令集还敢说自己是程序员?
- 英属泽西发行“金猪送福”邮票 草原剪纸花开海外
- 高德信息服务器,高德一站式全域出行服务平台:做聪明的出行服务
- CA Server证书申请与颁发 Apache2 HTTPS
- c语音异或运算符_一文看懂C语言异或运算
- 971. 翻转二叉树以匹配先序遍历
- 织梦教程:显示昨日今日时间不同效果
- 期货不变的本质是什么意思(期货不变的本质是什么意思呀)
- dialog设置最大高度占比
- 国内外经典开源数据大全!
热门文章
- 鼠标获取或失去焦点事件
- 数据湖概念辨析以及常见技术通览
- 为什么牛逼?——Stonie is a KungFu monk游戏精品功能介绍与详细规范,以及其中的挑战...
- c语言 printf 输出格式控制 %#x 带0x 16进制的输出
- arcgis 栅格转点时抹去value值为0的区域
- 响应式框架简单知识介绍
- 国家级表彰 | 小米人工智能实验室声学语音团队荣获“全国工人先锋号”荣誉称号...
- Agisoft Metashape 基于RTK技术的无人机航测免像控技术流程
- 向量计算:模,标量乘,加减法,距离,点乘,叉乘,投影,标准化
- 4种方法将视频转换成gif