您的位置:首页 > 其它

类和接口的设计原则

2015-08-20 21:10 260 查看
类和接口是Java语言的核心,也是基本抽象单元。遵循以下的原则,可以帮助我们设计出有用、健壮和灵活的类和接口。

使类和成员的可访问性最小化

区别模块的设计良好与否,关键在于这个模块对于外部模块而言,是否隐藏内部数据和其他实现细节。这样模块之间只通过API进行通信,不同模块之间通过消息调用完成功能。(信息隐藏或者封装)

信息隐藏(封装)重要的原因在于:

* 有效地对系统的各模块之间的关系进行解耦,各个模块可以独立开发、测试、优化、理解和修改

* 加快开发速度,模块可以并行开发

* 减轻维护负担,程序员容易理解这些模块,调试某个模块的时候不影响其他模块

* 系统完成之后,如果能够剖析出哪个模块影响了系统的性能,这个模块就可以进一步优化,不影响其他模块的正确性

* 使模块可重用

* 降低了大型系统的风险,即使整个系统不可用,但是这些独立的模块却有可能是可用的

Java语言的访问控制机制决定了类、接口和成员的可访问性。实体的可访问性由该实体声明的位置,以及该实体声明中而所出现的访问修饰符(private、protected和public)共同决定的。

尽可能使每个类或者成员不被外界访问(尽可能最小的访问级别)顶层的(外部,非嵌套的)类和接口,只有两种访问级别:包级私有的(package-private)和公有的(public)。

如果类和接口是包级私有的,实际上成了这个包实现的一部分,而不是该包导出API的一部分,在以后的发行版本中,可以对其修改、替换或者删除,无需担心影响到现有客户端程序。

如果类和接口是公有的,我们就有责任永远支持它,保持兼容性。

如果一个包级私有的顶层类(或者接口)只是在某一个类的内部被用到,就考虑使用它的那个类的私有嵌套类(即最后一条原则,优先使用静态成员类)

降低不必要公有类的可访问性(是包的公有API的一部分)比降低包级私有顶层类更重要(是包实现的一部分)

对于成员(域、方法、嵌套类(内部类)和嵌套接口)有四种访问级别:private、package-private、protected、public

在公有类中使用访问方法而非公有域

使可变性最小化

复合优先于继承

要么为继承而设计,提供文档说明,要么就禁止继承

接口优于抽象类

接口只用于定义类型

类层次优于标签类

用函数对象来表示策略

优先考虑静态成员类

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计