【发布时间】:2015-04-26 13:12:41
【问题描述】:
我正在创建一个游戏,您可以在其中与计算机或人类对战,每种游戏都有多个(高级)设置,添加新设置时,可能的游戏种类会迅速增加。
我想编写干净的代码,我面临的问题是我需要为所有可能的可选/互斥选项编写大量“不必要的”检查。不必要的,因为当使用特定设置创建游戏时,它可能已经知道其选项,因此哪些检查是多余的。我看不出有什么理由持续检查例如如果游戏只有计算机、人类或两者兼而有之。
我知道 Builder-pattern 可以解决将许多参数传递给构造函数的问题,其中许多参数是可选的。我可以在创建游戏时使用它。这解决了难以构建游戏的问题。但是,这仍然需要在游戏运行期间进行大量检查,以查看哪些设置已设置,哪些未设置。
有什么线索可以调查吗?
代码示例(仅说明)
Mode mode;
Vocabulary mVocabulary;
Player[] mPlayers;
GameLog mGameLog;
String mCurrentString;
int mMinimalWordLength = 3;
int mIndexActivePlayer;
int mNumberOfActivePlayers;
boolean mComputers; //[Optional]
int mNumberOfComputers; //[Required if mComputer is true]
Difficulty mDifficulty; //[Required if mComputer is true]
//One of these optionals are required
boolean mBlueTooth; //[Optional]
boolean online; //[Optional]
boolean sameDevice; //[Optional]
//Here I could use the builder pattern to set all the options
public Game(Vocabulary vocabulary, int numberOfPlayers, int minimalWordLength, Player[] players) {
this.mVocabulary = vocabulary;
this.mMinimalWordLength = minimalWordLength;
this.numberOfActivePlayers = numberOfPlayers;
this.mPlayers = players;
}
}
我正在创建一个需要mVocabulary 字词的游戏,其中包含玩家列表mPlayers 和一些可选设置。每个游戏要么是为计算机创建的,要么是为人类创建的,或者两者兼而有之。每个游戏要么是online,要么是blue-toot,要么是sameDevice。
基于这些选项,在整个代码中会发生不同的事情,因此您可以在此代码后面的每个方法中编写几个 if else if 语句。但是我想防止这种情况。
如果您将您的程序视为一棵决策树,您在程序中的特定时间处于特定位置,那么您就会知道,一旦以特定方式创建游戏,您应该查看哪里以及在哪里查看不要看。因为您在树的特定分支中。例如,你创建了一个只有人类的游戏,如果你知道只有人类玩家,那么奇怪的事情就是继续检查每个回合是否有玩家是人类,因为这就是你最初创建游戏的方式.
我希望这能让我的观点更清楚。虽然没有写完整的代码示例。
【问题讨论】:
-
这是一个非常非常抽象的要求。如果你提供一些例子来支持你的每一个陈述,那么提供一个最接近你正在寻找的答案将会非常有帮助。