java依赖倒转原则_设计原则之--依赖倒转原则
[各位博友晚上好,又到了晚上的这个时间,感谢大家一直对Darren博客的支持,希望这篇文章对你有所帮助: 这几天一直在看设计模式:简单工厂模式,策略模式,单一职责原则,开放
[依赖倒转原则又称依赖倒置原则:抽象不应该依赖细节,细节应该依赖于抽象。说白了,就是针对接口编程,不要针对实现编程。依赖倒置原则包含三层含义:1)高层模块不应该依 在传统的过程性系统的设计办法倾向于使高层次的模块依赖于低层次的模块;抽象层次依赖于具体层次。倒转原则就是要把这个错误的依赖关系倒转过来。 依赖(或耦合)关系的分类: 零耦合关系:如果两个类没有耦合关系,就称之为零耦合 具体耦合关系:具体耦合关系发生在两个具体的(可实例化)的类之间,经由一个类对另一个类的直接引用造成。 抽象耦合关系:抽象耦合关系发生在一个具体类和一个抽象类(或者java接口)之间,使两个发生关系的类之间存有最大的灵活性。
依赖倒转原则:要依赖于抽象,不要依赖于具体;抽象不应该依赖于细节,细节应该依赖于抽象(abstractions should not depend upon details, details should depend upon abstractions);不要针对接口编程,要依赖于实现编程(program to an interface , not an implementation) 针对接口编程的意思是说,应当使用java接口和抽象java类进行变量的类型声明、参量的类型声明、方法的返还类型声明、以及数据类型的转换等。 不要针对实现编程的意思是,不应当使用具体的java类进行变量的类型声明、参量的类型声明 、方法的返还类型声明、以及数据类型的转换等。 要保证做到这一点,一个具体的java类应当只实现java接口和抽象java类中声明过的方法,而不应该给出多余的方法。 变量被声明时的类型叫做变量的静态类型(明显类型),变量所引用的对象的真实类型叫做变量的真实类型。例如 List list = new ArrayList(); list变量的静态类型是List,真实类型是ArrayList。 在很多情况下,一个java程序需要引用一个对象。这个时候,如果这个对象有一个抽象类型的话,应当使用这个抽象类型作为变量的静态类型。这就是针对接口编程的含义。 在创建一个对象时,java语言要求使用new关键字以及这个类本身。而一旦这个对象被创建出来,那么就可以灵活的使用这个对象的抽象类型来引用它。因此,java语言中创建一个对象的过程是违背“开-闭”原则以及依赖倒转原则的。虽然在这个类被创建出来之后,可以通过多态性使得客户端依赖于其抽象类型。 在设计模式中的体现: 工厂方法模式:该模式将创建一个类的实例的过程封装起来,消费这个实例的客户端仅仅得到实例化的结果,以及这个实例的抽象类型。简单工厂模式将违反“开-闭”原则以及依赖倒转原则的做法封装到了一个类里面,而工厂方法模式将这个违反原则的做法推迟到了具体工程角色中。
[设计原则-------依赖倒转原则(DIP) 依赖倒转原则:抽象不应该依赖细节,细节应该依赖抽象。 通俗地说,就是要针对接口编程,而不要对具体实现编� ...]
java依赖倒转原则_设计原则之--依赖倒转原则相关推荐
- 代码设计的基础原则_设计原则:良好设计的基础
代码设计的基础原则 As designers, it's our goal to pass information in the most pleasing way possible. Startin ...
- java 反转 控制 注入_控制反转和依赖注入
全2册git版本控制管理(第2版)+ 99.8元 包邮 (需用券) 去购买 > 控制反转(Inversion of Control)即IoC,是一种模式,Spring的核心概念. 依赖注入(De ...
- java面向服务编程_设计面向领取驱动(DDD)的微服务
Domian-driven Design 领域-驱动-设计(DDD)提倡基于(用例相关的现实业务)进行建模. 1. DDD的视角 DDD将现实问题视为领域;DDD将独立的问题描述为有界限的上下文(一个 ...
- liskov替换原则_构造函数与打破Liskov替代原则
liskov替换原则 At the risk of being targeted by the PHP hate-mongers, I must confess that I'm pretty com ...
- java输入字符串异常_设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。...
设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为"XYZ",则抛出一个异常信息"This is a XYZ",如果从命令 ...
- java 百亿计算器_设计一个一百亿的计算器
.补码(负数在计算机中的存储) .百亿计算器 负数在计算机中以补码的形式存储. 负数的补码表示方法是:将负数表示成二进制原码(负数最高位是1,正数最高位是0)然后将原码取反(1变0,0变1),即反码, ...
- hutool的定时任务不支持依赖注入怎么办_设计一个任务调度算法,时间轮算法,比优先队列更高效...
当年我还是个学生的时候,有一次去参加欢聚时代的一个面试,有一道面试题记忆尤新,让你来实现一个定时任务,你会怎么做?为了简化问题,我们只用考虑内存方案,不用考虑数据持久化. 数组法 最简单的,我们可以把 ...
- python需要依赖注入吗_是否需要使用依赖注入容器?
译文首发于 是否需要使用依赖注入容器?,转载请注明出处. 本文是依赖注入(Depeendency Injection)系列教程的第 2 篇文章,本系列教程主要讲解如何使用 PHP 实现一个轻量级服务容 ...
- 设计模式练习_设计练习是邪恶的
设计模式练习 It was the final round of interviews. Or, so the candidate thought. 这是采访的最后一轮. 或者,所以候选人认为. Sh ...
最新文章
- 充分理解表达式——《狂人C》习题解答2(第二章习题5)
- soap php 分开类,PHP SoapClient类型映射的行为有所不同
- c#生成随机位数的汉字字符串
- 11 单线程+多任务异步协程 爬虫
- 一厕难求!NASA悬赏三万五千美元,只为一个能在月球上用的马桶
- 教你在Ubuntu上体验Mac风格
- JVM垃圾回收,面试问到的都有了
- 网站服务器需要定期重启吗,数据库服务器需要定期重启吗
- Hexo搭建自己的专属博客,连接github数据仓库
- Java 如何优雅的导出 Excel
- 三层交换机LACP协议对 L2/L3端口,报文处理实验
- C语言/C++基础之大炮打飞机
- ERP业务流程优化设计之思想和原则
- 用python画一条虚线_Python3 tkinter基础 Canvas create_line 画实线与虚线
- Mysql报错1055
- 表头不一致的多个文件如何按规定表头提取汇总(多个Excel按指定列值提取汇总)工具
- 生成好看的海底地形图
- Windows 隐藏小电影?
- c语言冒泡排序法代码(c语言冒泡排序法代码讲解)
- win10装win7时Bios设置方法