考虑采用静态工厂方法代替构造器
public class Coca {
private final int carbohydrate;
private final int calories;
private final int fat;
private final int sugar;
private Coca(int carbohydrate, int calories, int fat, int sugar) {
this.carbohydrate = carbohydrate;
this.calories = calories;
this.fat = fat;
this.sugar = sugar;
}
public static Coca includeAllCoca(int carbohydrate, int calories, int fat, int sugar) {
return new Coca(carbohydrate,calories,fat,sugar);
}
public static Coca noFat(int carbohydrate, int calories, int sugar) {
return new Coca(carbohydrate,calories,0,sugar);
}
public static Coca noSugar(int carbohydrate, int calories, int fat) {
return new Coca(carbohydrate,calories,fat,0);
}
}
优点1:静态工厂方法的名字由自己命名,而构造方法必须与类名相同
假如我们想要提供多个具有相同签名的构造器,这在Java中是做不到的,除非把参数列表的顺序做些调整,但这会对用户很不友好。
因此可以使用静态工厂方法,取不同的名字以表示不同的构造方式。
适用于类中含有多个构造器的情况,可以通过准确命名的静态方法返回我们需要的对象
优点2:构造方法每次调用都会创建一个对象,而静态工厂方法则不会每次调用时都创建要给对象。
适用于单例模式。
优点3:静态工厂方法可以返回原返回类型的任何子类型对象,这样在我们选择返回对象的类时就有了更大的灵活性
运用到了多态
缺点:
a. 类如果不含有公有的类或者受保护的构造器,就不能被子类化
b. 它们与其他的静态方法实际上没什么区别,因此我们约定了一些静态工厂方法的常用名称
本文探讨了在Java中使用静态工厂方法替代构造器的方法及其优势。通过具体示例,展示了如何利用静态工厂方法实现更灵活的对象创建过程,特别是在单例模式和多态应用中。同时,也提到了这种方法的一些限制。
799

被折叠的 条评论
为什么被折叠?



