【笔记1】考虑用静态工厂方法替代构造器

构造方法创建对象:

public Boolean(String s) { 
    this(toBoolean(s)); 
}
//调用
Boolean bTrue = new Boolean("true");

静态工厂方法创建对象:

public static Boolean valueOf(String s) { 
    return toBoolean(s) ? TRUE : FALSE; 
}
//调用
Boolean bTrue = Boolean.valueOf("true");

使用静态工厂方法的好处:

1)它与构造函数不同,它有名字,把名字起的更易于阅读。

      如果你想让2个构造函数拥有相同个数和类型的参数,这将是无法实现的;即使是2个不同类型的参数顺序倒置的,使用者也非常容易搞混乱。

2)它与构造函数不同,它每次被调用时,不要求非得创建一个新的对象。

 可以在全局唯一性对象中通过getInstance()方法提供对该对象的返回。

3)它与构造函数不同,它可以返回类型的子类型对象。

4)代码更简洁。

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

public class Main{
    public static void main(String[] args){
        MyMap<String, String> map1 = new MyMap<String, String>();
        //更加简洁,不需要重复指明类型参数,可以自行推导出来
        MyMap<String, String> map2 = MyMap.newInstance();
    }
}

使用静态工厂方法的缺点

 1)如果类不含public或protect的构造方法,将不能被继承;

2)与其它普通静态方法没有区别,没有明确的标识一个静态方法用于实例化类

 所以,一般一个静态工厂方法需要有详细的注释,遵守标准的命名,如使用getInstance、valueOf、newInstance等方法名;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值