《设计模式》-原则三:依赖倒置原则(DIP)
这几天晚上回来都去玩了!没有坚持学习。真的好惭愧! 非常自责 后面一定要坚持 一气呵成 争取每天学一点,把这个学完。
今天主要是看了一下 设计模式中的 原则三: 依赖倒置原则(DIP)
官方是这样定义的:所谓依赖倒置原则指的是是要依据抽象编程,不要依赖与具体。要求客户端依据抽象进行耦合。
意思也就是说抽象不应当依赖于具体,具体应该依赖抽象。要针对接口编程,不要针对具体编程。
额,看到了 官方的定义,在来谈谈自己的认识吧。说得挺简单的哈,抽象、抽象、再抽象。做起来可就不是那么容易了。
我的理解是这样的,所谓依赖倒置原则 就是把现实的业务逻辑进行抽象化,现实一点具体一点的意思就是说,拿到一个东西先别慌着去实现,而是分析一下可以分为几个步骤。找出主线环节,并针对每个环节 定义接口 或者定义抽象类,然后再继承接口或者抽象类进行实现。那么如果有业务扩充也只是多派生一个实现类而已,不会影响到整个系统的结构,这一点也就是之前所说的“开闭原则” 针对系统结构保持稳定,针对新的业务进行扩展。 那么就可以保证上层调用的稳定性了。
举个例子:假如现在要实现一个打印查询结果的功能。如果按照以前的思维就是 直接拿着查询条件去查询数据,然后拿着数据去执行打印导出。
那么如果要 用面向对象的思维去做的话 我的想法是 可以分为这几个部分一、组合查询条件 二、根据查询条件进行读取数据 三、根据数据进行导出。
这样分的主要考虑是 查询条件可能以后会增加、读取的数据纬度会发生变化(比如添加读取字段)、导出的模板格式或者导出的文件格式会发生变化。
那么会有一个抽象类 里面定义 三个抽象方法(获取查询条件、依据查询条件读取数据、依据数据进行导出) 然后可以将这三个方法基于接口进行实现, 在调用的时候只用 继承抽象类根据业务要求调用对应的实现接口去实现对应的打印导出。
额 想的也就这么多了。 也可能因为急于求成导致调入设计陷阱。 有老鸟看到还望指点一二!
《设计模式》-原则三:依赖倒置原则(DIP)的更多相关文章
- 7.12 其他面向对象设计原则3: 依赖倒置原则DIP
其他面向对象设计原则3: 依赖倒置原则DIP The Dependency Inversion Principle7.1 依赖倒置原则DIP The Dependency Inversion Pr ...
- 设计模式学习--面向对象的5条设计原则之依赖倒置原则--DIP
一.DIP简介(DIP--Dependency Inversion Principle): 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象.2.抽象不应该依赖于细节,细节应该依赖于抽象. ...
- IOS设计模式的六大设计原则之依赖倒置原则(DIP,Dependence Inversion Principle)
定义 高层模块不应该依赖于低层模块,二者都应该依赖于抽象:抽象不应该依赖细节:细节应该依赖抽象. 定义解读 依赖倒置原则在程序编码中经常运用,其核心思想就是面向接口编程,高层模块不应该依赖低层模块(原 ...
- 深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第5篇,依赖倒置原则LSP(The Dependency Inversion Principle ). 英文原文:htt ...
- Java设计模式(2:单一职责原则和依赖倒置原则详解)
一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...
- 最简单直接地理解Java软件设计原则之依赖倒置原则
理论性知识 定义 依赖倒置原则,Dependence Inversion Principle (DIP) 高层模块不应该依赖低层模块.二者都应该依赖其抽象. 抽象不应该依赖细节,细节应该依赖抽象. 针 ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...
- 设计模式六大原则(三):依赖倒置原则(Dependence Inversion Principle)
依赖倒置原则(DIP)定义: 高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来: 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码 ...
- zt 设计模式六大原则(3):依赖倒置原则
下面说法对不对? 父类将算法(逻辑)封装起来,子类实现细节:这个就叫DIP(依赖倒置:Dependency Inversion Principles),模板模式就是这个原则的实现.如果在父类中加一个t ...
- 【面向对象设计原则】之依赖倒置原则(DIP)
依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象.换言之,要针对抽象(接口)编程,而不是针对实现细节编程. 开闭原则( ...
随机推荐
- GC 年轻代 老年代 持久代
转载自:http://www.cnblogs.com/yaoyuan23/p/5587548.html 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Gener ...
- 半夜思考, Java 重载的实现
因为最近在学 scala,看到了参数的默认值这个特性,但是Java好像没有这个特性, Java8 也没有, 所以特意去查了一下,就牵扯到了 C++了,[只怪 C++没怎么学,,]. 下面将一下为什么 ...
- 开发者应该掌握的Java代码优化技能
就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了. 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对 ...
- Class.getResourceAsStream 和 ClassLoder.getResourceAsStream 的区别
问题描述 最近学习MyBaits时用到了 InputStream Resources.getResourceAsStream(String resource)来读取MyBatis配置文件,为了方便使用 ...
- BZOJ3203 SDOI2013保护出题人(三分)
给a做一个前缀和,那么现在每次所查询的就是(sn-sk)/(bn+nd-(k+1)d)的最大值.这个式子可以看成是(bn+nd,sn)和((k+1)d,sk)所成直线的斜率. 脑补一条直线不断减小斜率 ...
- NAT alg 和 ASPF
NAT alg 和 ASPF 参考:https://handbye.cn/719.html 来源:https://www.jianshu.com/p/8a8eb36eef7d NAT的部署已经在企业网 ...
- Atcoder Yahoo Programming Contest 2019 简要题解
A-C 直接放代码吧. A int n,k; int main() { n=read();k=read(); puts(k<=(n+1)/2?"YES":"NO&q ...
- SDOI2017硬币游戏
题面链接 洛咕 sol 神题,幸好我不是SD的QAQ. 假设你们都会\(O(n^3m^3)\)的高斯消元,具体来说就是建出\(Trie\)图然后套游走的板子. 然后我们发现可以把不能匹配任何串的概率压 ...
- 主机 & 虚拟机 & 开发板 三者的恩爱情仇
# 主机 & 虚拟机 & 开发板 > 三者网络连通性,使用ping命令检测 @ Bridge 模式 ## 主机 & 虚拟机 主机与虚拟机相当于一个网络里的两台主机,都有各 ...
- 20135239 益西拉姆 linux内核分析 读书笔记之第四章
chapter 4 进程调度 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务系统可以划分为两类: - 非抢占式多任务: - 进程会一直执行直到自己主动停止运行(这一 ...