考虑用静态工厂方法代替构造器

来源:互联网 发布:手机震动软件 编辑:程序博客网 时间:2024/05/20 20:43

考虑用静态工厂方法代替构造器

这里说的静态工厂方法不同于设计模式中的工厂方法

优点

1. 有名称

例如:
DateFormatUtil#string2Date(String dateStr,String format);

2. 不用每次都创建对象,可以减小系统开销

3. 可以返回类型的任意子类对象,甚至是非公有对象

public class Dog {    String name;    public static Dog getBlackDog() {        return new Dog();    }    public static Dog getJimDog() {        return new JimDog("Jim Dog");    }}class JimDog extends Dog {    JimDog(String name) {        System.out.println(name);        this.name = name;    }}

4. 使代码更加简洁

Map<String,Object> map = new HashMap<String,Object>();
可以改成:

newInstance(){    return new HashMap<String,Object>();}Map<String,Object> map = newInstance();

这一点在Java 7以后意义不大了。

缺点

1. 如果没有public或者protect的构造器,该类不能被子类化

鼓励程序员使用复合(composition)而不是继承。见16条

2. 跟其他static方法没有任何区别,Javadoc没有照顾到,不方便查看如何实例化对象

这一点意义不大,因为我们用的强大的IDE工具一眼就看出来了。

总结

思考

相对这种方法,构造器的优势是什么?

0 0
原创粉丝点击