Effective 1 用静态工厂方法代替构造器

静态工厂方法和设计模式中的工厂方法模式不同。本条目所指的静态工厂并不直接对应于设计模式中的工厂方法ss

例如,将boolean基本类型转换为Boolean对象的引用

public  static Boolean valueOf(boolean b)
{
    return b ? Boolean.TRUE : Boolean.FALSE;
}

以下是其优势:

  1. 有名字

  2. 不必再每次调用他们的时候创建一个新对象

    将创建好的实例对象进行缓存

    静态工厂方法能够为重复的调用返回相同对象,这样有助于累总能严格控制在某时刻哪些实例应该存在。这样的类称作,实例受控的类

  3. 可以返回原返回类型的任何子类对象

  4. 所返回的对象的类可以随着每次调用而发生变化,这取决于静态方法的参数值

缺点

  1. 类不含有共有或者受保护的构造器,就不能被子类实例化

  2. 程序猿很难发现他们

    以下总结工厂方法的惯用名称

    from 类型转化方法:他只有一个单参数,返回该类型相对应的实例

    ​ Date.from(instant)

    of 聚合方法 带有多个参数,返回该类型的一个实例,把他们合并起来

enum Num{
    ONE,TWO,THREE
}

public static void main(String[] args) {
    EnumSet<Num> nums = EnumSet.of(Num.ONE, Num.TWO);
}

valueOf 比from和of更繁琐的一种替换方法

BigInteger bigInteger = BigInteger.valueOf(Integer.MAX_VALUE);

instatce或者getInstance 返回的实例是通过方法参数来描述的,但是不能说于参数具有同样的值

​ 例如 单例模式

create或者newInstance 像instance或者getInstance一样,但create或者newInstance能够确保每次调用都能返回一个新的实例

​ 例如 多例模式

getType 像getInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂返回对象的类型

FileStore path = Files.getFileStore(Paths.get("path"));

​ newType 像newInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂返回对象的类型

type getType和newType的简版,例如:

Stack<String> stack = new Stack<>();
stack.push("1");
stack.push("2");
ArrayList<String> list = Collections.list(stack.elements());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值