依赖倒转原则

依赖倒转原则 【 Dependency Inversion Principle(DIP)

      就是在我们编程的时候方法的参数类型,变量,对于其他具体类的依赖,我们尽量的使用抽象类。
就是说尽量依赖于抽象,而不是依赖于实现。 
   
  在书中两种表述:
     (1),Abstraction should not depend on details.details should depend on abstraction. (抽象不应当依赖于细节,细节应当依赖于抽象)。Abstraction就像是建筑物的基础,而其实现类就是在基础上面一层一层的往上面走。你拆掉最上面那层,和拿走最下面的基础,有什么不同了,这就是差异了。所以Abstraction是要相当的稳定,是维护的重点。也正是因为稳定,所以我们尽量的依赖于Abstraction,既是稳定系统,也是灵活系统。 
   
  (2),Program to an Interface,not an implementation(要针对接口编程,不要针对实现编程)
     应当使用java接口和抽象java类进行变量的类型声明,参数的类型声明,方法返回值的类型和数据类型的转换。 
   


在这里我就有一个问题了。
     List l= new Vector();而不要使用 Vector l=new Vector();我就有疑问 如果我一个类B 继承于类A,B有一些A不存在的方法,而我的方法中我得使用B,这里那就菜了。
   所以看到这句话了。保证做到这点,一个具体的类应当只实现Java接口,和抽象java类中声明过的方法,而不应当给出多余的方法。
      
   依赖倒装原则是很难实现的,在这些原则中,因为从上面也可以看到。还是使用了Vector类这个具体的类,还是对具体的类有依赖,所以,对于依赖倒装的创建new Vector(),有一个专门的模式,工厂模式,不过只是把违反这个原则的地方压缩到一个类里面。

posted on 2009-07-02 22:59 luofeng225 阅读(1140) 评论(3)  编辑  收藏 所属分类: 设计模式

评论

# re: 依赖倒转原则 2009-08-31 17:52 郭克

如果满足LSP原则就不会有你说的问题了。你觉得呢?

里氏代换原则
  里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。
  里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
  回复  更多评论   

# re: 依赖倒转原则 2010-05-17 13:34 翟云祥

JAVA API中违反设计模式的地方也很多,所以对用户的使用造成了麻烦,如果Vector类只想开放其个性的方法,完全可以把这些方法抽象成为一个接口,这样不就实现了依赖倒转原则了么。。。  回复  更多评论   

# re: 依赖倒转原则 2010-05-17 13:38 翟云祥

还有就是可以根据聚合/合并原则,自己写一个符合自己意图的类,合理的使用继承  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

公告

我曾经听到这么一个故事: 一个年轻的程序员问一个老程序员(一个比较牛逼的公司的CTO) 年轻程序员: 你为什么这么牛X., 就好像没有你不会的。老程序员: 积累的。年轻程序员: 怎么才能积累到您的程度呢。我每天都在积累。但是似乎都没有感觉到进步。老程序员: 我从20岁开始做到了一件事情,直到今天,而且尽可能地保证不间断。年轻程序员: 到底是什么? 老程序员: 我每天保证自己有2个小时在学习新的东西。

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

相册

收藏夹

Java Website

java技术博客

搜索

最新评论

阅读排行榜

评论排行榜