这是一个关于赌博的简单场景。有一个赌徒和骰子。赌徒可以掷骰子。然后骰子的值会改变对于上述场景,我创建了这个类图如上图赌徒可以掷骰子, 在赌徒掷骰子时在Gambler.roll()方法中实现,骰子值在变化,在Dice.roll()方法中实现使用如下所示的java代码实现上述场景请注意此代码为伪代码,语法可能有误class Gambler{ private Dice dice; Gambler(Dice dice){ this.dice = dice; } public void roll(){ dice.roll();//delegation call }}/* --------------------------- */import java.util.Random;class Dice{ private int faceValue; public int getFaceValue(){ return faceValue; } public void roll(){ //get random value between 1 ,6 Random random = new Random(); this.faceValue = random.nextInt((6 - 1) + 1) + 1; }}我想知道我的实现是否符合 OOAD 最佳实践并且不违反封装?特别是在将掷骰子委托Gambler给Dice班级时是否正确Gambler有roll()方法?
2 回答
holdtom
TA贡献1805条经验 获得超10个赞
你的设计基本上是正确的。唯一的就是-
前面缺少的faceValue
属性。我不确定缺少的指标是否默认为某些内容(乍一看无法找到和指示)。无论如何,您应该添加它以使其明确。
此外,Dice
应重命名为Die
(singular)。
最后(更深入地研究您的代码)您需要一个Die
包含 2 个元素的数组,而不仅仅是一个元素,dice
并且您需要同时掷两个骰子。
料青山看我应如是
TA贡献1772条经验 获得超8个赞
我认为骰子不是赌徒的一部分,赌徒只有掷骰子的行为。我认为下面的实现会更好:
class Gambler{
//some field
public int roll(Dice dice){
return dice.roll();
}
}
/* --------------------------- */
import java.util.Random;
class Dice{
private int[] values = new int[]{1,2,3,4,5,6};
public int roll(){
//get random value between 1 ,6
Random random = new Random();
return values[random.nextInt((6 - 1) + 1) + 1];
}
}
当然,这取决于实际需求。
添加回答
举报
0/150
提交
取消