zoukankan      html  css  js  c++  java
  • 《大话设计模式》第五章

    依赖倒转原则,或依赖倒置原则
    抽象不应该依赖细节,细节应该依赖于抽象。就是要针对接口编程,不要对实现编程。
    高层模块不应该依赖低层模块。两个都应该依赖抽象。

    面向过程的开发时,为了使得常用代码可以复用,一般都会把这些常用代码写成许许多多函数的程序库,这样我们在做新项目时,去调用这些低层的函数就可以了,这就叫做高层模块依赖低层模块。
    但是我们要做新项目时,发现业务逻辑的高层模块都是一样的,但客户却希望使用不同的数据库可存储信息方式,这时就出现麻烦了。我们希望能再次利用这些高层模块,但高层模块都是与低层的访问数据库绑定在一起的,没办法复用这些高层模块,这就非常糟糕。而如果不管高层模块还是低层模块,它们都依赖于抽象,具体一点就是接口或抽象类,只要接口是稳定的,那么任何一个的更改都不用担心其它受到影响,这就使得无论高层模块还是低层模块都可以很容易地被复用。这才是最好的办法。

    里氏代换原则
    一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替成它的子类,程序的行为没有变化,简单地说,子类型必须能够替换掉它们的父类型。

    只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

    依赖倒转其实就是谁也不要依靠谁,除了约定的接口,大家都可以灵活自如。
    依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化的设计了。

    不好理解,不过里氏代换原则可以试一下,把前面的代码中用子类代替父类,

    game oGame;

    oGame = new Game1();

    结果仍然正常,就算是符合了吧

  • 相关阅读:
    测试WCF遇到的一些问题
    Webservices部署在IIS6.0上的一个小问题
    同程面试经历
    IIS6.0+win2003部署MVC网站的一些问题
    C++ 结构体初始化
    Sicily 1146:采药(dp)
    Sicily 10359:Valuable Jewellery(贪心+优先队列)
    Sicily 2503:最长字符串(贪心)
    MATLAB产生离散信号
    Sicily 1681: Matchsticks(贪心)
  • 原文地址:https://www.cnblogs.com/yzx99/p/1248287.html
Copyright © 2011-2022 走看看