1、使用构造方法前考虑一下静态工厂方法

使用构造方法前考虑一下静态工厂方法

 

请注意,这里所说的工厂方法和设计模式中所说的工厂方法是不同的,这里说的静态工厂方法例如:

public static User getUserInstance(){
    return new User();
}

如此看来和普通的构造方法没有什么区别,但仔细分析有以下四个优点:
1、静态工厂方法是有名字的,这一点对于提高开发效率至关重要。
    将上面的例子延伸,如果User类有两个构造方法User(String id)和User(String name,String status),那么在构造User对象时就容易发生混淆。而使用静态工厂方法就避免了这种误会,如:

public static User getUserById(String id){
    return new User(id);
}
public static User getUserByNameStatus(String name,String status){
    return new User(name,status);
}

2、可以实现单体访问,举个例子说明:

public class ConfigFactory{
    private static SystemConfig sc = null;
    public static SystemConfig getSystemConfig(){
        if(sc==null)
            sc = new SystemConfig();
        return sc;
    }
}

3、静态工厂方法返回的对象可以是定义的类,也可以是其子类,这是构造函数做不到的,不用举例子了。

4、使用静态工厂方法优化泛型使用,减少代码重复,一般情况下,我们使用泛型采用:

Map<String, List<String>> m = new HashMap<String, List<String>>();

的方式,使用静态工厂方法,我们可以写成:

public static <K, V> HashMap<K, V> newInstance() {
    return new HashMap<K, V>();
}

调用的时候,直接使用:

Map<String, List<String>> m = HashMap.newInstance();

即可。

可惜的是,截至JDK1.6为止,HashMap也没有提供这种方法,我们只能将此写在自己的工具类里。

 

当然这样做也不是有百利而无一害的,缺点是:

1、如果我们将一个类的构造方法指定为私有,只对外提供一个静态工厂方法的话,这个类将是无法继承的。

2、静态工厂方法将和普通方法在一起出现在javadoc中,而不会像构造方法一样被单独展示在一起,这样会造成文档阅读的不便。

 

上述介绍,不是让您在创建类时,摒弃构造方法,只使用静态工厂方法,而是让您在使用构造方法前,多考虑一种静态工厂方法的实现方式。而已。   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值