类和接口的设计原则
2015-08-20 21:10
260 查看
类和接口是Java语言的核心,也是基本抽象单元。遵循以下的原则,可以帮助我们设计出有用、健壮和灵活的类和接口。
信息隐藏(封装)重要的原因在于:
* 有效地对系统的各模块之间的关系进行解耦,各个模块可以独立开发、测试、优化、理解和修改
* 加快开发速度,模块可以并行开发
* 减轻维护负担,程序员容易理解这些模块,调试某个模块的时候不影响其他模块
* 系统完成之后,如果能够剖析出哪个模块影响了系统的性能,这个模块就可以进一步优化,不影响其他模块的正确性
* 使模块可重用
* 降低了大型系统的风险,即使整个系统不可用,但是这些独立的模块却有可能是可用的
Java语言的访问控制机制决定了类、接口和成员的可访问性。实体的可访问性由该实体声明的位置,以及该实体声明中而所出现的访问修饰符(private、protected和public)共同决定的。
尽可能使每个类或者成员不被外界访问(尽可能最小的访问级别)顶层的(外部,非嵌套的)类和接口,只有两种访问级别:包级私有的(package-private)和公有的(public)。
如果类和接口是包级私有的,实际上成了这个包实现的一部分,而不是该包导出API的一部分,在以后的发行版本中,可以对其修改、替换或者删除,无需担心影响到现有客户端程序。
如果类和接口是公有的,我们就有责任永远支持它,保持兼容性。
如果一个包级私有的顶层类(或者接口)只是在某一个类的内部被用到,就考虑使用它的那个类的私有嵌套类(即最后一条原则,优先使用静态成员类)
降低不必要公有类的可访问性(是包的公有API的一部分)比降低包级私有顶层类更重要(是包实现的一部分)
对于成员(域、方法、嵌套类(内部类)和嵌套接口)有四种访问级别:private、package-private、protected、public
使类和成员的可访问性最小化
区别模块的设计良好与否,关键在于这个模块对于外部模块而言,是否隐藏内部数据和其他实现细节。这样模块之间只通过API进行通信,不同模块之间通过消息调用完成功能。(信息隐藏或者封装)信息隐藏(封装)重要的原因在于:
* 有效地对系统的各模块之间的关系进行解耦,各个模块可以独立开发、测试、优化、理解和修改
* 加快开发速度,模块可以并行开发
* 减轻维护负担,程序员容易理解这些模块,调试某个模块的时候不影响其他模块
* 系统完成之后,如果能够剖析出哪个模块影响了系统的性能,这个模块就可以进一步优化,不影响其他模块的正确性
* 使模块可重用
* 降低了大型系统的风险,即使整个系统不可用,但是这些独立的模块却有可能是可用的
Java语言的访问控制机制决定了类、接口和成员的可访问性。实体的可访问性由该实体声明的位置,以及该实体声明中而所出现的访问修饰符(private、protected和public)共同决定的。
尽可能使每个类或者成员不被外界访问(尽可能最小的访问级别)顶层的(外部,非嵌套的)类和接口,只有两种访问级别:包级私有的(package-private)和公有的(public)。
如果类和接口是包级私有的,实际上成了这个包实现的一部分,而不是该包导出API的一部分,在以后的发行版本中,可以对其修改、替换或者删除,无需担心影响到现有客户端程序。
如果类和接口是公有的,我们就有责任永远支持它,保持兼容性。
如果一个包级私有的顶层类(或者接口)只是在某一个类的内部被用到,就考虑使用它的那个类的私有嵌套类(即最后一条原则,优先使用静态成员类)
降低不必要公有类的可访问性(是包的公有API的一部分)比降低包级私有顶层类更重要(是包实现的一部分)
对于成员(域、方法、嵌套类(内部类)和嵌套接口)有四种访问级别:private、package-private、protected、public
在公有类中使用访问方法而非公有域
使可变性最小化
复合优先于继承
要么为继承而设计,提供文档说明,要么就禁止继承
接口优于抽象类
接口只用于定义类型
类层次优于标签类
用函数对象来表示策略
优先考虑静态成员类
相关文章推荐
- 一步一步跟我学易语言之第二个易程序菜单设计
- 一个简单的asp数据库操作类
- C#实现用于操作wav声音文件的类实例
- 在线管理数据库 类
- Lua面向对象之类和继承浅析
- Lua中类的实现原理探讨(Lua中实现类的方法)
- Lua中的类编程代码实例
- C#常用目录文件操作类实例
- c# 类和成员的修饰详细介绍
- C#中实现判断某个类是否实现了某个接口
- C#类的创建与初始化实例解析
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- 基于逻辑运算的简单权限系统(原理,设计,实现) VBS 版
- C#中类与结构的区别实例分析
- C#实现读写ini文件类实例
- C#自定义的字符串操作增强类实例
- C#自定读取配置文件类实例
- C#中设计、使用Fluent API