比方说,我要建一个不变的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);
}
}
基本上我不想暴露类的内部。如果我没有私有构造函数,那么我需要使用一个公有构造函数,其中有一个参数Map
,就像私有构造函数一样(我也可能会失去withScore()
方法)以允许评分。但这是做工厂方法的有效方式吗?
这听起来像你在说什么更多的是一种生成器比一个工厂,但没错,这是一个很好的方法。 – chrylis
@chrylis你会说工厂方法不应该建立在现有的实例上吗? –
我无法理解这个问题。 – chrylis