• 第十三条:使类和成员的可访问性最小化


    要区别设计良好的模块与设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节。

    设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开来。然后,模块之间只通过它们的API进行通信,一个模块不需要

    知道其他模块的内部工作情况。这被称为信息隐藏或者封装。

    由于我们实现了很好的封装,只提供若干的API供客户端代码来访问,非API涉及的类和成员,客户端代码是无法直接使用的,这样我们在修改

    这些非API涉及的类和成员,我们就不用担心客户端代码使用了它们,造成我们修改了这些代码,从而影响了客户端代码的行为。总之一句话,

    合理的使用封装,为模块之间的松耦合而努力。

    访问控制机制(access mode)决定了类,接口,成员的可访问性。正确的使用访问修饰符,对于实现信息隐藏是非常关键的。

    第一条规则:尽可能使每个类和成员不被外界访问。尽可能使用最小的访问级别。

      对于类和接口,只有两种可能的访问级别:包级私有的和公有的。使用public修饰符声明了类和接口,那么这个类和接口就是公有的;如果省略

    public,那么这个类就是包级私有的。通过把类或者接口做成包级私有的,它实际上成了这个包的实现的一部分,而不是该包导出的API的一部分。

    以后对它的修改,只需要担心这个包内的其他类对它的使用,而不用担心客户端代码对它的使用。特别,如果一个类只是在某一个类的类的内部

    被使用到,那么我们可以考虑将这个类做成需要它的类的私有嵌套类(私有内部类),而不是包级私有类,这样就进一步降低了访问级别。

      对于成员(五类:域,初始化块,构造器,方法,内部类、内部接口),有四种可能的访问级别:

    私有的                 private

    包级私有的            缺省

    受保护的              protected

    公有的                 public

    应该把所有其他的成员都变成私有的,只有当同一个包中的另一个类真正需要访问一个成员时,才应该删除private修饰符,使该成员变成包级私有的。

    从包级私有变成受保护的 ,会大大增强这个成员的可访问性。受保护的成员应该尽量少用。

    实例域(非static的域)决不能是公有的。如果域是非final的,或者域是final的,但是引用的是一个可变对象,那么这个域一旦成为公有的,就放弃了

    对存储在这个域中的值进行限制的能力。包含公有可变域的类并不是线程安全的。

    对于静态域也建议尽量少使用公有的。但是一种情况除外,如果这个类提供了一些常量,那么可以通过公有的静态final域来暴露这些常量。通常,这些域

    的名称由大写字母组成,单词之间下划线隔开。但是这些公有的静态final域,要么是基本类型的值,要么引用不可变对象的引用。如果final域指向的是可变

    对象的引用,那么它就具有非final域的所有缺点,虽然引用本身不能被修改,但是它引用的对象却可以被修改-----这将导致灾难性的后果。

  • 相关阅读:
    webpack(二)
    webpack(一)
    初探Vue SSR(1)
    Node版本管理控制器n
    Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner
    微信小程序分享参数传递
    关于vue-cli3.*搭建项目遇到问题整理
    请求头出现provisional headers are shown 和 vue-cli 3.x配置跨域代理
    HDU6409 没有兄弟的舞会
    HDU6446 Tree and Permutation
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4459483.html
Copyright © 2020-2023  润新知