gpt4 book ai didi

java - 将私有(private)构造函数用于工厂方法?

转载 作者:行者123 更新时间:2023-11-30 07:09:07 26 4
gpt4 key购买 nike

假设我正在构建一个不可变的 Yahtzee 记分卡类:

public final class Scorecard {

private Map<Category, Integer> scorecard = new HashMap<Category, Integer>();

public Scorecard() {
// Instantiates a new empty scorecard
}

private Scorecard(Map<Category, Integer> scorecard) {
this.scorecard = scorecard;
}

public Scorecard withScore(Category category, int[] roll) {
newScorecard = new HashMap<Category, Integer>(scorecard); // Pretend that this is a deep-copy
newScorecard.put(category, calculateScoreFromRoll(roll));
return new Scorecard(newScorecard);
}

public int getScore(Category category) {
return scorecard.get(category);
}

}

基本上我不想公开类的内部结构。如果我没有私有(private)构造函数,那么我将需要使用带有 Map 参数的公共(public)构造函数,就像私有(private)构造函数一样(而且我可能会丢失 withScore() 方法)以允许评分。但这是执行工厂方法的有效方法吗?

最佳答案

一个非常常见且好的模式是拥有所有私有(private)构造函数和公共(public)静态工厂方法:

public class MyClass {
private MyClass() {}
public static MyClass fromA(A foo) {
MyClass o = new MyClass();
o.field = bar; // etc
return o;
}
public static MyClass fromB(B foo) {
MyClass o = new MyClass();
o.field = bar; // etc
return o;
}
}

注意:这允许具有相同参数类型的不同工厂方法,这是构造函数所不允许的。

关于java - 将私有(private)构造函数用于工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com