`
renyy
  • 浏览: 5840 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

设计原则——依赖倒置原则(DIP)

阅读更多

 

依赖倒置原则 (DIP)


核心内容:
1、高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
2、抽象不应该依赖于细节,细节应该依赖于抽象。

 

示例关系图

FishGUI 为实例,从实践的角度来看。假设 FishGUI 框架系统必须要移植到不同的操作系统(如: Windows Unix ),为了使操作系统的 变化不影响框架层,就必须抽象出一个操作系统适配器接口, FishGUI 框架层中的类只依赖于该接口,而该接口的派生类具体实现到不同操作系统的调用。这个实现是符合依赖倒置原则的。

对应上图用代码去实现如下:

接口编写 ( 对应上图中的标识 1)

package dip;

/**
 * 定制一个播放flash功能接口
 * @author renyy
 *
 */
public interface IFlashPlay {
	
	public void playFlash();

}

 

2 、在 windows 系统下实现播放 flash 的方式代码如下(对应上图中的标识 2 ):

package dip;
/**
 * 在windows下的flash播放器
 * @author renyy
 *
 */
public class WindowsFlashPlay implements IFlashPlay{
	
	public void playFlash() {
		System.out.println("windows flashplayer is working!");
	}

}
 

   在 unix 系统下实现播放 flash 的方式代码如下(对应上图中的标识 2 ):

 

package dip;
/**
 * 在unix下flash播放器
 * @author renyy
 *
 */
public class UnixFlashPlay implements IFlashPlay {
	
	public void playFlash() {
		System.out.println("unix flashplayer is working!");
	}

}
 

使用方用户根据自己的情况所需实现 flash 播放的代码如下(对应上图中的标识 3 ):

package dip;

/**
 * 依赖倒置原则(DIP)
 * 
 * 用户根据自己的需要去使用不同的flash播放器
 * 
 * @author renyy
 * 
 */
public class UserFlashPlay implements IFlashPlay {
	private IFlashPlay flash = new WindowsFlashPlay(); // 用户确定是用windows的flashplayer播放flash

	// private IFlashPlay flashPlay = new
	// UnixFlashPlay();//用户确定是用unix的flashplayer播放flash

	public void playFlash() {
		flash.playFlash();// 用户自己去决定我要用那种系统的播放方式。
		// flashPlay.playFlash();
	}

	public static void main(String[] args) {
		new UserFlashPlay().playFlash();
	}
}
 

 

运行后输入:

windows flashplayer is working!

这样等用户发现自己需要在 unix 系统下播放 flash 时就可以用我们的

UnixFlashPlay 这个实现类提供的方法来在 unix 下播放 flash ,而设计者无须修改任何代码。

 

 

  • 大小: 9.3 KB
分享到:
评论
1 楼 renyy 2009-04-06  
大家也看到了这篇文章有一个图片没有加上去,路径是本地磁盘D:\xiaoguotu.jpg,我在编辑时用的插入图片,可以不行,有知道的请在下面回复一下,先谢了。

相关推荐

    面向对象的设计原则——类设计原则

    依赖倒置原则 (DIP) 依赖倒置原则强调依赖关系应该从高层模块流向低层模块,而不是相反。具体而言,高层模块不应该依赖于低层模块的具体实现,而应该依赖于抽象;低层模块则应该依赖于高层模块提供的抽象接口。...

    面向对象七大原则——肖文斌.pdf

    2. 依赖倒置原则(DIP - Dependency Inversion Principle) 依赖倒置原则主张高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。这一原则说明了高层策略性的代码和低层细节...

    面向对象设计原则

    以上介绍的五种面向对象设计原则——单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则和开闭原则,都是面向对象编程领域中非常重要的指导思想。遵循这些原则可以帮助开发者构建出更加健壮、可维护和易于扩展...

    23种 设计模式---面向对象的基本原则

    5. 依赖倒置原则(Dependency Inversion Principle, DIP):高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象。抽象不应该依赖于具体实现,而具体实现应该依赖于抽象。 接下来,我们来看看23种设计模式...

    你知道软件设计的6大原则吗?S.O.L.I.D.设计原则

    依赖倒置原则(Dependency Inversion Principle, DIP) **定义**:依赖倒置原则主张高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。这意味着代码应当面向接口...

    设计模式六大原则 设计模式详解

    3. 依赖倒置原则(Dependency Inversion Principle,DIP):高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。这通常通过使用接口或抽象类来实现。 4. ...

    软件架构设计完整——从案例看两类软件架构概念ppt课件.ppt

    为了提高软件架构设计的质量,可以采用一些设计模式和原则,例如单一职责原则(SRP)、开闭原则(OCP)、依赖倒置原则(DIP)等。这些设计模式和原则可以帮助我们设计出一个更加灵活、可维护和可扩展的软件架构。 ...

    敏捷软件开发:原则、模式与实践.pdf

    第十一章 依赖倒置原则(DIP) 11.1 依赖倒置原则(DIP) 11.2 层次化 11.3 一个简单的例子 11.4 熔炉示例 11.5 结论 参考文献 第十二章 接口隔离原则(ISP) 12.1 接口污染 12.2 分离客户就是分离接口 12.3 接口...

    OO设计五个原则.pdf

    2. **依赖倒置原则**(Dependency Inversion Principle,简称DIP):高层次的模块不应该依赖于低层次的模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。这样可以降低模块间的耦合度,使得...

    面向对象5大原则.pdf

    LSP)、接口隔离原则(Interface Segregation Principle, ISP)和依赖倒置原则(Dependency Inversion Principle, DIP)。这些原则旨在提供一种指导思路,帮助开发者创建出易于理解、扩展和维护的代码库。 单一...

    非常好的C++设计模式项目资源,分享出来.zip

    依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) 。 抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽象(稳定)。 开放封闭原则(OCP) 对扩展开放,对更改...

    敏捷软件开发:原则、模式与实践

    第十一章 依赖倒置原则(DIP) 11.1 依赖倒置原则(DIP) 11.2 层次化 11.3 一个简单的例子 11.4 熔炉示例 11.5 结论 参考文献 第十二章 接口隔离原则(ISP) 12.1 接口污染 12.2 分离客户就是分离接口 12.3 接口...

    面向对象程序设计与原则

    5. 依赖倒置原则(Dependency Inversion Principle, DIP):高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。 超越面向对象: 随着编程语言和技术的发展...

    java设计的两本图书

    SOLID原则是其中的核心,它包含了单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则指导开发者创建更稳定、可维护和易于扩展的代码。例如,单一职责...

    软件设计(设计模式)课程实验报告.docx

    面向对象设计原则是软件开发的基础,包括单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。实验旨在理解和应用这些原则,通过实际案例分析如何在代码中...

    敏捷软件开发原则、模式与实践 C#版

    LISKOV替换原则 第11章 DIP:依赖倒置原则 第12章 ISP:接口隔离原则 第13章 写给C#程序员的UML概述 第14章 使用UML 第15章 状态图 第16章 对象图 第17章 用例 第18章 顺序图 第19章 类图 第20章 咖啡的启示 第三...

    深入理解JavaScript系列.chm

    22.S.O.L.I.D五大原则之依赖倒置原则DIP 23.JavaScript与DOM(上)——也适用于新手 24.JavaScript与DOM(下) 25.设计模式之单例模式 26.设计模式之构造函数模式 27.设计模式之建造者模式 28.设计模式之工厂模式 29...

    小例子背后的大道理——从DIP中“倒置”的含义说接口的正确使用

    我才意识到这个灯的设计有问题——它的开关是换不了的。一面给用户解释,一面考虑着把灯和开关分开。咱也是学过设计模式的人,知道要面向接口编程,绝不应该简单地把Light类拆解成Light和Switcher两个类。因为...

Global site tag (gtag.js) - Google Analytics