而依赖倒置原则的本质骑士就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。但是这个原则也是6个设计原则中最难以实现的了,如果没有实现这个原则,那么也就意味着开闭原则(对扩展开发,对修改关闭)也无法实现。
依赖倒置原则(Dependence Inversion Principle),简称DIP
定义
High level modules should depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
即
1、高层模块不应该依赖低层模块,两者都应该依赖于抽象(抽象类或接口)
2、抽象(抽象类或接口)不应该依赖于细节(具体实现类)
3、细节(具体实现类)应该依赖抽象
抽象:即抽象类或接口,两者是不能够实例化的。
细节:即具体的实现类,实现接口或者继承抽象类所产生的类,两者可以通过关键字new直接被实例化。
而依赖倒置原则的本质骑士就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。但是这个原则也是6个设计原则中最难以实现的了,如果没有实现这个原则,那么也就意味着开闭原则(对扩展开发,对修改关闭)也无法实现。
依赖倒置有三种方式来实现
1、通过构造函数传递依赖对象
比如在构造函数中的需要传递的参数是抽象类或接口的方式实现。
2、通过setter方法传递依赖对象
即在我们设置的setXXX方法中的参数为抽象类或接口,来实现传递依赖对象
3、接口声明实现依赖对象
例如下面的例子
涂涂是个女僧
- public class Tutu {
- //涂涂是个女孩,会煮面
- public void cook(Noodles noodles)
- {
- noodles.eat();
- }
- }
面条(目前只会煮面)
- public class Noodles {
- //吃面条
- public void eat()
- {
- System.out.println("涂涂吃面条...");
- }
- }
涂涂坐在家里吃面(场景类)
- public class Home {
- public static void main(String args[])
- {
- Tutu tutu = new Tutu();
- Noodles food = new Noodles();
- tutu.cook(food);
- }
- }
运行结果:涂涂吃面条...
但是这有个问题,涂涂只会做面条,不可能每次都吃面条吧,天天吃面吃死你,所以在上面的Tutu类中的cook方法中,如果涂涂会做其他吃的,那岂不是更好。于是她向家庭主妇迈进了一步,使用了依赖倒置原则。
也就是涂涂通过学习还可以焖米饭,炒鱿鱼(虽然听着不爽,但是很好吃),京酱肉丝啊等等。要想在代码中实现,就需要实现两个接口:ITutu和IFood
- public interface ITutu {
- //这样就会做很多饭菜了
- public void cook(IFood food);
- }
实现类
- public class Tutu implements ITutu {
- @Override
- public void cook(IFood food) {
- food.eat();
- }
- }
食物接口
- public interface IFood {
- public void eat();
- }
这样就为扩展留出了很大的空间,方面扩展其他的类。也不会对细节有变动。以后涂涂想吃什么学一下就可以自己做了
实现面条
- public class Noodles implements IFood {
- @Override
- public void eat() {
- System.out.println("涂涂吃面条...");
- }
- }
实现米饭
- public class Rice implements IFood {
- @Override
- public void eat() {
- System.out.println("涂涂吃米饭(终于吃上米饭了)...");
- }
- }
场景类:涂涂在家里开吃了,想吃什么直接做就是了
- public class Home {
- public static void main(String args[])
- {
- //接口使不能实例化滴
- ITutu tutu = new Tutu();
- //实例化米饭,涂涂可以吃米饭了
- IFood rice = new Rice();
- //吃面条
- //IFood noodles = new Noodles();
- tutu.cook(rice);
- }
- }
这样各个类或模块的实现彼此独立,不互相影响,实现了。
原文链接:http://www.cnblogs.com/loulijun/archive/2012/03/05/2380524.html
相关推荐
设计模式6大原则:依赖倒置原则
主要介绍了java 设计模式之依赖倒置,结合实例形式详细分析了依赖倒置的相关概念、原理、使用技巧及相关操作注意事项,需要的朋友可以参考下
主要介绍了详解Java设计模式中的依赖倒置原则,针对面对对象编程中的抽象的运用,需要的朋友可以参考下
3.依赖倒置原则:面向接口编程 4.接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 5.迪米特法则还有一个更简单的定义:只与直接的朋友通信。其中,我们称出现成员...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
=======学生党纯手打======= 编写一个记事本程序 要求: 用图形用户界面实现。 能实现编辑、保存、另存为、查找替换等功能。 提示:使用文件输入输出流。
课程目标:掌握7个设计原则,掌握UML建模,掌握常用设计模式,了解其他设计模式,Java设计模式,本教程可以帮助你服务项目,优化项目,实现程序的高效运行。〖课程目录〗:源码详情+=','+15783;2019Java设计模式...
详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。
JAVA-DESIGN-PATTERNS 更好地了解Java设计模式 SOLID原则: 单一责任原则(./SRP.java) 开放封闭原则(./OCP.java) Liskov替代原理(./LSP.java) 接口隔离原理(./ISP.java) 依赖倒置原则(./DIP.java)
* Lesson 4 [依赖倒置原则](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson4) * Lesson 5 [接口隔离原则](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson5) * Lesson 6...
2.依赖倒置原则 3.单一职责原则 4.接口隔离原则 5.迪米特法则 6.里氏替换原则 7.合成复用原则 创建型 单例模式 工厂模式 原型模式 建造者模式 结构型 代理模式 适配器模式 桥接模式 装饰模式 外观模式 享元模式 组合...
软件设计模式概述GoF 的 23 种设计模式的分类和功能UML中的类图及类图之间的关系开闭原则——面向对象设计原则里氏替换原则——面向对象设计原则依赖倒置原则—
依赖倒置原则 dip(Dependence Inversion Principle) 4. 接口隔离原则 isp(interface-segregation principles) 5. 迪米特法则 lod(Least Knowledge Principle) 6. 开闭原则 ocp 设计模式 (pattern) 1. 单例模式 ...
超越设计模式 软件开发 java 设计模式 封装变化 依赖倒置 易于扩展
1. 工厂方法模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。 好处 良好的封装性,代码结构清晰... 依赖倒置原则:只依赖产品的抽象 里氏替换:产品子类替代父类。
本章将详细介绍开闭原则(OCP)、依赖倒置原则(DIP)、单一职责原则(SRP)、接口隔离原则(ISP)、迪米特法则(LoD)、里氏替换原则(LSP)、合成复用原则(CARP)的具体内容。 为什么需要学习这门课程? 你在...
1.七种设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则。 2.创建型设计模式:工厂方法、抽象工厂、建造者、单例常用,原型模式相对不常用。 3.结构型设计...
设计模式 一. 基础 1.1 UML类图说明 首先来了解一下uml符号的意思 1.2 六大原则 单一职责:方法、类、接口单一 里氏替换:父类出现的地方都能透明的使用其子类 覆盖或者实现父类的方法数输入参数可以被放大 覆盖或者...
1.设计模式七大原则 单一职责原则 接口隔离原则 依赖倒转(倒置)原则 里氏替换原则 开闭原则 迪米特法则 合成复用原则 1.1.单一职责原则 1.1.1.基本介绍 一个类只应负责一项职责。 1.1.2.应用实例 package ...
作为准备进行Java程序员面试的候选人,以下是一些你应该关注和准备的关键领域和...面向对象设计和设计原则:理解面向对象设计的基本原则,如单一职责原则、开闭原则、依赖倒置原则等。能够使用UML图表进行简单的设计。