发布时间:2018-05-28责任编辑:朱明 浏览:1265
类和接口是java程序设计语言的核心,java语言提供了很多强大的基本元素,本章的指导原则可以帮助你更好的利用这些基本元素,设计出更加有用、健壮和灵活的程序。
(1)使类和成员的可访问性最小化
要区别设计良好的模块与设计不好的模块,重要因素判断因素是:其是否隐藏了内部数据和实现细节。设计良好的模块之间只通过他们的API互相访问,这个概念称为信息隐藏 或 封装。
封装的重要性:
a、有效的解除各模块的耦合关系
b、各模块可并行开发,加快开发进度
c、方便调试,各模块互不影响
d、提高模块的可重用性
java提供的访问控制机制有助于信息隐藏:
类或接口的访问级别有:包级私有的、共有的。如果一个类没有必要被包外的其他模块访问,就应该做成包级私有的
如果一个包级私有的类,仅仅在某一个类的内部被用到,那么这个包级私有的类就应该被做成唯一使用他的那个类的私有内部嵌套类。
类成员的访问级别:
a、private 私有的,仅在类的内部可以访问
b、包级私有(default) 若类成员前面没有修饰符,则为包级私有,仅同一包内的类可以访问
c、protected 受保护的,类的子类,以及同一包内的类可以访问
d、public 公有的,任何位置都可以访问
可变类属性绝对不能为共有的:对与非final的类属性,或者指向可变对象的final引用,不能设置成共有的。
a、公有的类属性失去了对类属性的限制
b、公有的类属性改变时失去了对他采取行动的能力
c、公有的类属性导致类不是线程安全的
d、若类常量构成了类整个api的一部分,可以通过公有的静态常量来暴露这些属性 public static final。这些final量要么为基本类型的值,要么指向不可变对象的引用
e、不应该具有公有的final数组 数组内的值是可变的 可变要设置成私有
总结:可变的对象引用要尽可能的减小访问级别,除了公有的静态final属性外,其他属性都不应该设置成公有的,并且公有的静态final属性必须没有指向
(2)在公有类中使用访问方法而非公有属性
在公有类中,不要暴露类的成员变量,而应该为类的成员变量提供公有的访问方法。
对于暴露了的成员变量,如果在以后的维护中想要修改其表示方法,将变的不可能, 因为他的api已经遍布在客户端代码中
(3)使可变性最小化
不可变类,只是其实例不可修改的类,不可变类中的所有信息必须在实例创建的时 候提供,并且在该实例的整个声明周期都是固定不变的
为了使类不可变,必须遵循如下规则:
a、不要提供任何可以修改对象状态的方法
b、保证类不会被扩展
c、所有的字段都是final的
d、所有的字段都是私有的
e、确保对于任何可变组件的互斥访问
(4)复合优先于继承
继承违背了封装原则,父类的更改会破坏到子类,子类必须要跟着父类的更改而改 变。除非超类是专门为了扩展而设计的,否则优先考虑复合
(5)要么为继承而设计,要么禁止继承
为继承设计,并提供文档说明
该类的文档必须精确的说明覆盖每个方法所带来的影响
项目开发组 供稿