使用静态工厂方法代替构造器和构建器使用

来源:互联网 发布:ubuntu 12.04 163源 编辑:程序博客网 时间:2024/05/20 00:10



     根据《Effective Java》本书,加上自己的一些理解。


   好处:1.静态工厂方法有自己的方法名称。(没必要和类名一样,不容易区分)。

2.因为是静态的,所以不用每次调用它们的时候都创建一个新的对象。

3.可以返回原返回类型的任何子类型(例如:本来你这个构造方法是返回的是自身的一个对象,但是你现在也可以返回当前类的一个子类对象),这样做就更加灵活。

4.创建参数化类型实例的时候,能够代码简洁,更清晰(例如:Map<String,List<String>> m= new hashMap<String, List<String>>(1); 可以提供静态工厂方法:

public static <K,V> hashMap<k,v> new Instance(int length){

return new HashMap<K,V>(length);

}

  缺点:类如果不含有公有的或者受保护的构造器,就不能被子类初始化。(例:如果涉及到有父子关系的,并且是私有化的就不能够被子类初始化)





构建器:可以理解成为建造者模式



  如果遇到了多个构造器参数时候,就可以考虑使用建造者模式了。



例:

public class person{

private String name;

private int age;


------默认提供get,set方法

}


加入person中有多个参数,我们有的时候只是需要对其中的几个字段进行赋值。那这种情况,我么咋办呢?


1.new一个对象,set哪些字段就好了。

2.创建对象的时候,使用构造方法(参数不同)


第一种做法,用的地方很多的时候,就会导致很多重复性的代码,可维护性差。


第二种做法,构造方法太多。到最后很难维护。




个人解决方案:


1.在原有类中,加入一个静态内部类。用来做创建者的事情。

2.在内部类中,申明和外部类同样的字段,并且get,set

3.把内部类的每个属性都做成方法,返回值是内部类

4.内部类中提供build方法,new 外部类(this);

5.在外部类提供一个构造方法,参数是内部类。把内部类的属性值赋值给外部类


6.在外部使用。例: Person per=new Person.man().age(21).sex("男").build();就可以生成一个符合自己要求的例子。


今天就分享到这里,纯手工打字。希望对于大家能够有帮助。谢谢!!!




      

阅读全文
1 0