`

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

分享到:
评论

相关推荐

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    JAVA设计模式-设计模式公司出品

    JAVA设计模式是编程领域中非常重要的概念,它为软件开发人员提供了在特定情境下解决常见问题的模板。设计模式公司出品的《JAVA设计模式》书籍,详细介绍了多种设计模式,适合不同水平的程序员学习和使用。 首先,...

    Java设计模式-图解-附代码.doc

    它们帮助开发者遵循面向对象设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则,从而提高代码的可读性、可维护性和可复用性。 在实际编程中,理解并熟练应用设计模式可以使代码更加...

    7依赖倒置原则-课程内容.rar

    - 在设计模式中,工厂模式、策略模式、观察者模式等都体现了依赖倒置原则。例如,工厂模式通过创建产品接口,使得客户端代码可以依赖于产品接口,而不是具体的产品实现。 3. **优点**: - 提高代码的可复用性:...

    Java设计模式-23种设计模式详解

    Java设计模式详解 Java设计模式是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 设计模式的六大原则...

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

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

    java 设计模式-个人总结

    ### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...

    JAVA设计模式之设计原则 ---开闭原则源码

    开闭原则是面向对象设计中的一个核心原则,它在JAVA设计模式中占据着重要的地位。这一原则由格里·贝斯提出,旨在指导开发者如何设计可维护和可扩展的软件系统。开闭原则(Open-Closed Principle,OCP)的核心思想是...

    java依赖倒置demo.zip

    Java依赖倒置原则是软件设计中的一个重要概念,它源自于设计模式之父Misko Hevery提出的"Dependency Inversion Principle",简称为DIP。这个原则是面向对象设计的五大原则(SOLID)之一,旨在提高代码的可复用性和可...

    Java设计模式学习.pdf

    Java设计模式是软件开发中一种被广泛采用的方式,它是一组被反复使用、多数人知晓、分类编目、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 根据提供的文件内容,...

    JAVA design pattern-java设计模式

    此外,设计模式不仅限于Java,它们也适用于其他面向对象的语言,因为它们基于普遍的软件设计原则,如开闭原则(Open-Closed Principle)、里氏替换原则(Liskov Substitution Principle)、依赖倒置原则(Dependency...

    JAVA设计模式(java设计)

    通过对这些设计模式的学习和应用,开发者能够更好地理解软件设计的原则,如单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。这有助于编写出更具弹性、易于理解和维护的代码。在实际项目中,...

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

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

    JAVA版-设计模式解析(第二版)综合项目实战pdf文档+视频教程

    1. **设计原则**:首先,教程会介绍SOLID原则,包括单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些都是设计模式的基础,有助于编写出易于维护和扩展的代码。 2. **创建型模式**:...

    java的23种设计模式-动力节点

    Java设计模式是软件工程中常见的设计范式,用于解决特定问题,提升代码的可维护性、可复用性和可扩展性。Java共有23种设计模式,它们可以根据不同的场景和目的被分类为三大类:创建型模式、结构型模式和行为型模式。...

    设计模式--java版.rar

    本资源“设计模式--java版.rar”提供了一种深入理解和应用Java设计模式的方式。 在Java开发中,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。创建型模式如单例(Singleton)、工厂方法(Factory ...

    java23种设计模式详细讲解

    设计模式是软件工程中解决常见问题的模板或通用解决方案,Java设计模式是这些解决方案在Java语言中的具体实现。《java23种设计模式详细讲解》这本书系统地介绍了23种设计模式,并通过具体的例子来阐释每种模式的应用...

    design-pattern-java-2 设计模式-java版

    以上便是Java设计模式的主要知识,每一个设计模式都围绕着面向对象的六大设计原则来展开,它们分别是单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和合成复用原则。单一职责原则...

    Java面试题-设计模式+设计原则+代理.pdf

    "Java面试题-设计模式+设计原则+代理.pdf" 设计模式是软件开发中的一种解决方案,它提供了一种通用的设计方法来解决常见的问题。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 1. Singleton 模式...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    5. **设计原则**:结合SOLID原则(单一职责、开闭原则、里氏替换、接口隔离和依赖倒置),分析如何通过设计模式实现这些原则。 通过解答课后习题和模拟试题,学生不仅能深入理解设计模式的精髓,还能提升分析问题和...

Global site tag (gtag.js) - Google Analytics