`

封 装

    博客分类:
  • OOD
 
阅读更多

每一个类都应该有自己的职责,职责应该是单一类型的,就是我只做这一类的事情,其它的事件不需要我来管,而”这一类事情“有紧密的相关性,也就是高内聚。 

 

   类中每个方法都应该功能单一、代码简洁,如果有多个地方使用的相同的代码块,应该将该代码块抽成独立的private的方法。

 

  封状的意义在于降底耦合度,只对外提供能够完成职责的方法,而封闭内部实现细节和数据等。

 

  类中除了职责方法外,一般还包含:

   1.属性 对外应该是private ,如果外部确实需要访问,可以提供get/set方法

 

   2.某些方法,是为了支撑职责的实现而存在,如果这些方法对外部没有意义,应该设为private,

   

   3.模版方法,某个方法是为了支撑职责的实现而存在,而这个方法可能会有多种实现方式,当前只给出一个默认的,将这个方法设为protected的,允许子类覆盖,以另一种方式实现。 如果当前没有一种适合的实现,那么这个方法就是abstract 的,这个类也就是abstract的。

    如java中的类加载器:ClassLoader的loadClass方法,该方法首先从父类加载器加载类,如果没有,就从启动加载器中加载,这个方法是protected的,那么就可以由子类覆盖这个方法:对于某此特定的类,可以从网络、指定文件目录或数据库中加载,其它类则调用父类的 loadClass默认加载。

    

 

 

  4.扩展性方法:这些方法一般为空方法,声明为protected,在职责的实现过程中被调用过。这是一种扩展的方式,允许子类覆盖,以达到自动被调用的目的。

    如java 中的线程池ThreadPoolExecutor 就提供了三个可扩展方法,在任务运行前,任务异常时,线程池结束是可以被调用的目的。

 

   

 

  5.包内可见的方法:如果包内的类都是为了完成相关职责而存在的,有些时候需要提供一些包内可见的方法以方便调用,就像走后门一样,绕过一些东东。


 

 总而言之,类应该是高内聚的,尽量不提供不必要的方法和属性的访问权限。

   

 

 

  • 大小: 19.8 KB
  • 大小: 12.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics