zoukankan      html  css  js  c++  java
  • 里氏代换原则等

         《Java与模式》读书笔记。

          里氏代换原则

          里氏代换原则(LSP)简言之就是基类的属性方法一定是适应于子类的,反之则不然。

          在编译期,Java编译器就会检查程序是否是符合里氏代换原则,不符合就不能通过。违反里氏代换原则的一个例子就是子类试图将基类中的public方法覆盖为private方法,是编译不过的,子类中接口的使用范围只能更广。

          Java编译器检查程序是否是符合里氏代换原则是有限的,实现层次和逻辑层次是无法判断的。

          Java API中也有违反里氏代换原则的例子,Properties继承自Hashtable。Properties假设key和value都是String型的,而Hashtable中的key和value都是Object型的,适用于Hashtable不一定就适用于Properties。

          Properties ps = new Properties();

          ps.setProperty("123", "111");

          ps.put("123", 111);    //从Hashtable中继承
          System.out.println(ps.getProperty("123"));   //返回结果null

          对于违反里氏代换原则可以做如下的处理。

          

          依赖倒转原则

          依赖倒转原则(DIP)简言之就是:要依赖于抽象,不要依赖于具体。

          ArrayList em = new ArrayList();应当改为:List em = new ArrayList();

          这是日常编码的规范,也是依赖倒转的一个例子。

          依赖倒转原则基于抽象类和接口,并且要能够保证使用基类的地方就可以使用子类,里氏代换原则是依赖倒转原则的基础。

          接口隔离原则

          接口隔离原则(ISP)是说:使用多个专门的接口总比使用单一的接口要好。

          一个大的接口包含了很多功能函数,则实现该接口的类也需要实现很多功能函数,可能只是用到了其中的一部分,这样是不合理的。对接口做修改引起的影响也很大,分解为多个小的接口会好很多。

         日常编程中要求一个方法只做一件事,便于维护,复用,也类似于接口隔离原则。

         

          将所有功能集中于一个接口是一个坏的设计,应该按功能分为不同的接口。

          

          合成/聚合复用原则

          合成/聚合复用原则(CARP)简言之就是:尽量使用合成/聚合,尽量不要使用继承。

          合成/聚合复用原则就是在一个新对象内使用一些已有的对象,使之成为新对象的一部分。

          通过继承来达到复用优点很明显:父类的大部分功能直接为子类所有。

          缺点为:父类的内部细节对于子类是透明的,又称为白箱复用。父类的实现变化时,子类不得不做出变化(例如覆盖父类的方法变化时)。

          合成/聚合复用原则讲的就是尽量通过合成/聚合而不是继承来完成复用。

          迪米特法则

          迪米特法则(LoD)又称为最少知识原则,即一个对象应该尽量隐藏内部的实现细节,仅通过接口与外部进行交互。

          尽量降低成员的访问属性,类的属性应为private型的,通过get和set与外界进行交互。方法也应为private型,仅在必要时改为protected和public的。

          提供get和set方法就是保证了良好的封装。

      开闭原则

      开闭原则的核心是:对扩展开放,对修改关闭。

      对扩展开放——模块应该可以通过扩展来满足新的需求

      对修改关闭——不允许修改核心代码,或者尽量最小化

      开闭原则的核心是:抽象、接口、多态。

      可以想一下Eclipse,标准的Eclipse是不支持ClearCase的,但是可以安装插件,来完成新的需求。ClearCase插件需要实现接口的中的方法,Eclipse支持调用即可完成扩展。

  • 相关阅读:
    MonoRail学习Component
    Eclipse中用户库的使用
    ASP.Net2.0中自定义控件在page中的注册
    WF学习Console Workflow Application
    Which Style of Workflow When?[转]
    使用UserControl时,在Page中定义方式
    参数类型异常
    GridView使用一些记录
    在使用Mybatis进行测试时出现报错:Caused by: java.lang.ClassNotFoundException: Cannot find class: Student
    递归反向输出字符串
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/3788073.html
Copyright © 2011-2022 走看看