而依赖倒置原则的本质骑士就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。但是这个原则也是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
相关推荐
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
JAVA设计模式是编程领域中非常重要的概念,它为软件开发人员提供了在特定情境下解决常见问题的模板。设计模式公司出品的《JAVA设计模式》书籍,详细介绍了多种设计模式,适合不同水平的程序员学习和使用。 首先,...
它们帮助开发者遵循面向对象设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则,从而提高代码的可读性、可维护性和可复用性。 在实际编程中,理解并熟练应用设计模式可以使代码更加...
- 在设计模式中,工厂模式、策略模式、观察者模式等都体现了依赖倒置原则。例如,工厂模式通过创建产品接口,使得客户端代码可以依赖于产品接口,而不是具体的产品实现。 3. **优点**: - 提高代码的可复用性:...
Java设计模式详解 Java设计模式是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 设计模式的六大原则...
设计模式6大原则:依赖倒置原则
### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...
开闭原则是面向对象设计中的一个核心原则,它在JAVA设计模式中占据着重要的地位。这一原则由格里·贝斯提出,旨在指导开发者如何设计可维护和可扩展的软件系统。开闭原则(Open-Closed Principle,OCP)的核心思想是...
Java依赖倒置原则是软件设计中的一个重要概念,它源自于设计模式之父Misko Hevery提出的"Dependency Inversion Principle",简称为DIP。这个原则是面向对象设计的五大原则(SOLID)之一,旨在提高代码的可复用性和可...
Java设计模式是软件开发中一种被广泛采用的方式,它是一组被反复使用、多数人知晓、分类编目、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 根据提供的文件内容,...
此外,设计模式不仅限于Java,它们也适用于其他面向对象的语言,因为它们基于普遍的软件设计原则,如开闭原则(Open-Closed Principle)、里氏替换原则(Liskov Substitution Principle)、依赖倒置原则(Dependency...
通过对这些设计模式的学习和应用,开发者能够更好地理解软件设计的原则,如单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。这有助于编写出更具弹性、易于理解和维护的代码。在实际项目中,...
主要介绍了java 设计模式之依赖倒置,结合实例形式详细分析了依赖倒置的相关概念、原理、使用技巧及相关操作注意事项,需要的朋友可以参考下
1. **设计原则**:首先,教程会介绍SOLID原则,包括单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些都是设计模式的基础,有助于编写出易于维护和扩展的代码。 2. **创建型模式**:...
Java设计模式是软件工程中常见的设计范式,用于解决特定问题,提升代码的可维护性、可复用性和可扩展性。Java共有23种设计模式,它们可以根据不同的场景和目的被分类为三大类:创建型模式、结构型模式和行为型模式。...
本资源“设计模式--java版.rar”提供了一种深入理解和应用Java设计模式的方式。 在Java开发中,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。创建型模式如单例(Singleton)、工厂方法(Factory ...
设计模式是软件工程中解决常见问题的模板或通用解决方案,Java设计模式是这些解决方案在Java语言中的具体实现。《java23种设计模式详细讲解》这本书系统地介绍了23种设计模式,并通过具体的例子来阐释每种模式的应用...
以上便是Java设计模式的主要知识,每一个设计模式都围绕着面向对象的六大设计原则来展开,它们分别是单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和合成复用原则。单一职责原则...
"Java面试题-设计模式+设计原则+代理.pdf" 设计模式是软件开发中的一种解决方案,它提供了一种通用的设计方法来解决常见的问题。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 1. Singleton 模式...
5. **设计原则**:结合SOLID原则(单一职责、开闭原则、里氏替换、接口隔离和依赖倒置),分析如何通过设计模式实现这些原则。 通过解答课后习题和模拟试题,学生不仅能深入理解设计模式的精髓,还能提升分析问题和...