`

Java 设计模式 - 依赖倒置原则

阅读更多

而依赖倒置原则的本质骑士就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。但是这个原则也是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、接口声明实现依赖对象

例如下面的例子

涂涂是个女僧

  1. public class Tutu {  
  2.     //涂涂是个女孩,会煮面  
  3.     public void cook(Noodles noodles)  
  4.     {  
  5.         noodles.eat();  
  6.     }  

面条(目前只会煮面)

  1. public class Noodles {  
  2.     //吃面条  
  3.     public void eat()  
  4.     {  
  5.         System.out.println("涂涂吃面条...");  
  6.     }  

涂涂坐在家里吃面(场景类)

  1. public class Home {  
  2.     public static void main(String args[])  
  3.     {  
  4.         Tutu tutu = new Tutu();  
  5.         Noodles food = new Noodles();  
  6.         tutu.cook(food);  
  7.     }  

运行结果:涂涂吃面条...

但是这有个问题,涂涂只会做面条,不可能每次都吃面条吧,天天吃面吃死你,所以在上面的Tutu类中的cook方法中,如果涂涂会做其他吃的,那岂不是更好。于是她向家庭主妇迈进了一步,使用了依赖倒置原则。

也就是涂涂通过学习还可以焖米饭,炒鱿鱼(虽然听着不爽,但是很好吃),京酱肉丝啊等等。要想在代码中实现,就需要实现两个接口:ITutu和IFood

  1. public interface ITutu {  
  2.     //这样就会做很多饭菜了  
  3.     public void cook(IFood food);  

实现类

  1. public class Tutu implements ITutu {  
  2.    
  3.     @Override 
  4.     public void cook(IFood food) {  
  5.         food.eat();  
  6.     }  
  7.    

食物接口

  1. public interface IFood {  
  2.     public void eat();  

这样就为扩展留出了很大的空间,方面扩展其他的类。也不会对细节有变动。以后涂涂想吃什么学一下就可以自己做了

实现面条

  1. public class Noodles implements IFood {  
  2.    
  3.     @Override 
  4.     public void eat() {  
  5.         System.out.println("涂涂吃面条...");  
  6.     }  
  7.    

实现米饭

  1. public class Rice implements IFood {  
  2.    
  3.     @Override 
  4.     public void eat() {  
  5.         System.out.println("涂涂吃米饭(终于吃上米饭了)...");  
  6.     }  

场景类:涂涂在家里开吃了,想吃什么直接做就是了

  1. public class Home {  
  2.     public static void main(String args[])  
  3.     {  
  4.         //接口使不能实例化滴  
  5.         ITutu tutu = new Tutu();  
  6.         //实例化米饭,涂涂可以吃米饭了  
  7.         IFood rice = new Rice();  
  8.         //吃面条  
  9.         //IFood noodles = new Noodles();  
  10.         tutu.cook(rice);  
  11.     }  
  12. }   

这样各个类或模块的实现彼此独立,不互相影响,实现了。

原文链接:http://www.cnblogs.com/loulijun/archive/2012/03/05/2380524.html

分享到:
评论

相关推荐

    设计模式6大原则:依赖倒置原则

    设计模式6大原则:依赖倒置原则

    java 设计模式之依赖倒置实例详解

    主要介绍了java 设计模式之依赖倒置,结合实例形式详细分析了依赖倒置的相关概念、原理、使用技巧及相关操作注意事项,需要的朋友可以参考下

    详解Java设计模式编程中的依赖倒置原则

    主要介绍了详解Java设计模式中的依赖倒置原则,针对面对对象编程中的抽象的运用,需要的朋友可以参考下

    JAVA设计模式六大原则详细讲解(面向对象语言通用)

    3.依赖倒置原则:面向接口编程 4.接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 5.迪米特法则还有一个更简单的定义:只与直接的朋友通信。其中,我们称出现成员...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    java课程设计作业--记事本程序

    =======学生党纯手打======= 编写一个记事本程序 要求: 用图形用户界面实现。 能实现编辑、保存、另存为、查找替换等功能。 提示:使用文件输入输出流。

    Java设计模式(2.78G)

    课程目标:掌握7个设计原则,掌握UML建模,掌握常用设计模式,了解其他设计模式,Java设计模式,本教程可以帮助你服务项目,优化项目,实现程序的高效运行。〖课程目录〗:源码详情+=','+15783;2019Java设计模式...

    设计模式之六大原则详解,Markdown笔记

    详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。

    JAVA-DESIGN-PATTERNS:更好地了解Java设计模式

    JAVA-DESIGN-PATTERNS 更好地了解Java设计模式 SOLID原则: 单一责任原则(./SRP.java) 开放封闭原则(./OCP.java) Liskov替代原理(./LSP.java) 接口隔离原理(./ISP.java) 依赖倒置原则(./DIP.java)

    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...

    java餐饮管理系统源码-pattern:设计模式扫盲,以身边故事来讲解设计模式

    2.依赖倒置原则 3.单一职责原则 4.接口隔离原则 5.迪米特法则 6.里氏替换原则 7.合成复用原则 创建型 单例模式 工厂模式 原型模式 建造者模式 结构型 代理模式 适配器模式 桥接模式 装饰模式 外观模式 享元模式 组合...

    kunlingou#lifealien#Java-一览设计模式1

    软件设计模式概述GoF 的 23 种设计模式的分类和功能UML中的类图及类图之间的关系开闭原则——面向对象设计原则里氏替换原则——面向对象设计原则依赖倒置原则—

    JavaCodeDesign:这是Java设计模式的样本项目

    依赖倒置原则 dip(Dependence Inversion Principle) 4. 接口隔离原则 isp(interface-segregation principles) 5. 迪米特法则 lod(Least Knowledge Principle) 6. 开闭原则 ocp 设计模式 (pattern) 1. 单例模式 ...

    超越设计模式 软件开发

    超越设计模式 软件开发 java 设计模式 封装变化 依赖倒置 易于扩展

    设计模式特点

    1. 工厂方法模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。 好处 良好的封装性,代码结构清晰... 依赖倒置原则:只依赖产品的抽象 里氏替换:产品子类替代父类。

    Java软件设计模式精讲

    本章将详细介绍开闭原则(OCP)、依赖倒置原则(DIP)、单一职责原则(SRP)、接口隔离原则(ISP)、迪米特法则(LoD)、里氏替换原则(LSP)、合成复用原则(CARP)的具体内容。 为什么需要学习这门课程? 你在...

    积分兑换系统java源码-DesignPattern:设计模式

    1.七种设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则。 2.创建型设计模式:工厂方法、抽象工厂、建造者、单例常用,原型模式相对不常用。 3.结构型设计...

    DesignPattern:java常用的23种设计模式,以及设计原则

    设计模式 一. 基础 1.1 UML类图说明 首先来了解一下uml符号的意思 1.2 六大原则 单一职责:方法、类、接口单一 里氏替换:父类出现的地方都能透明的使用其子类 覆盖或者实现父类的方法数输入参数可以被放大 覆盖或者...

    java版五子棋源码-java_design_pattern:图解Java设计模式

    1.设计模式七大原则 单一职责原则 接口隔离原则 依赖倒转(倒置)原则 里氏替换原则 开闭原则 迪米特法则 合成复用原则 1.1.单一职责原则 1.1.1.基本介绍 一个类只应负责一项职责。 1.1.2.应用实例 package ...

    Java面试宝典和毕设PPT模板

    作为准备进行Java程序员面试的候选人,以下是一些你应该关注和准备的关键领域和...面向对象设计和设计原则:理解面向对象设计的基本原则,如单一职责原则、开闭原则、依赖倒置原则等。能够使用UML图表进行简单的设计。

Global site tag (gtag.js) - Google Analytics