类和接口的一些优秀习惯

来源:互联网 发布:微距摄影师500px知乎 编辑:程序博客网 时间:2024/06/05 23:56

几个规则:

使类和成员可访问性最小化:尽可能使每个类或者每个成员不被外界访问,只暴露不得不暴露的信息。所有的域应该不是公有的

                                                    能private的尽量private。 

在公有类中使用访问方法而非公有域:如果类是包级私有的或者私有的嵌套类,那么暴露数据域没有本质的问题,但最好还是严谨一些

                                                                    即使数据域是final的,暴露出去也存在潜在的危险

使可变性最小化:尽量使用不可变类。1.不提供任何修改对象的方法 2.保证类不会被扩展  3.所有的域都是final的  4.所有的域都是私有的  5.确保对任何可变的互斥访问

                                 返回一个值得时候,new 一个新的类而不是改变对象的值

                                使用不可变类的坏处是,对于不同的值必须创建新的对象,所以一些重复使用的值最好现在类的内部静态定义好static final。

                              注意添加序列化的方法

                              如果一个类不能做成不可变的,也应该尽量限制他的可变性


接口应该只用于定义类型,不要创建一个只定义静态常量的接口,这样会把实现细节泄露到该类导出的api中。在将来类的开发过程中还回出现许多不必要的麻烦

工具类是一个合理的替代方法:public class A{

                                                                 private A();

                                                                 public static final double B = 1.0;

                                                         }

用函数对象表示策略。一般做法是实现函数式接口。这个思想在java8中被大量用到。


复合优先于继承

继承打破了封装性,最好不要继承一个包外的类。否则,如果超类在开发的时候有一些自己的约定,我们是不知道的,继承会有潜在的危险。同时,如果超类在后续开发中,与子类有了冲突,也会导致不良的后果。只有在两个类有着严格的从属关系时,才应该选择继承。通常发生在同一个程序员开发自己的java包的时候。

一个好的替代方法是复合:

Effective Java86页例子


接口好于抽象类的原因是,类只能继承一个父类,但是却可以实现多个接口。而且继承会对代码的结构有着严重的限制,而接口却可以提供扁平化的结构。

结合接口和抽象类能够有着完美的效果,骨架类。它通过提供对接口的最简单实现,达到让继承他的子类可以有效地实现接口。而且骨架类并不强制开发者使用它的

方法,因为他是为了继承而设计的。实现了骨架类的子类可以在接口被修改的时候,轻松的实现接口。Effective Java98


对方法的参数进行检查
保护类中的域,进行保护性拷贝,无论是构造器还是返回方法
容器返回不要返回null,返回空的容器
方法重载是静态绑定的,方法覆盖是动态绑定的,要慎用重载,尽量避免重载

0 0