JAVA 静态工厂方法

静态工厂方法是类提供实例的一种方式,与构造器不同,它们可以有不同的名称且不创建新对象,常用于单例、不可变类及返回子类实例。这种方式提供了灵活性,如在EnumSet中根据枚举大小返回不同子类实例。JDBC框架也利用静态工厂方法获取服务提供者的实例,实现了解耦和服务接口的抽象统一。静态工厂方法和工厂模式的区别在于,工厂模式主要关注解耦,使客户端通过工厂而非直接创建产品实例。
摘要由CSDN通过智能技术生成

静态工厂方法是一个类产生一个该类实例的静态方法,用于补充或取代类的构造器。
例如 Boolean 中有如下代码段,其中 valueOf 就是一个静态工厂方法。

//...
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
//... 
public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
}

注意,工厂模式中也有工厂方法,这和这里的静态工厂方法是不一样的。
使用静态工厂方法提供类的实例有以下一些优点。
1)静态工厂方法可以有不同于类名的名字,用户更容易从方法名猜测到其用途,例如 BigInteger 类中有一个静态工厂方法

public static BigInteger probablePrime(int bitLength, Random rnd){
    //...
}

该方法为用户返回一个很可能是质数的大整数。
2) 如上述 Boolean 类的方法 valueOf 所表现的, 静态工厂方法不需要新生成一个类的实例,它只是返回一个类的实例,这种方式常常能够提供效率上的改善。静态工厂方法常应用于单例模式中(Effective Java 中推荐使用枚举类型实现单例),保证一个类只被实例化一次,其它地方需要该类的实例是,总是返回同一个实例。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值