【发布时间】:2019-03-18 22:46:57
【问题描述】:
这是一个关于赌博的简单场景。
有一个赌徒和骰子。
赌徒可以掷骰子。然后骰子值会改变
对于上述场景我创建了这个类图
如上图所示
赌徒可以掷骰子,它在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() 方法对吗?
【问题讨论】:
-
您的
Gambler正确地将roll委托给Dice(尽管您仍然需要一种方法来检索Gambler中的值)。我关心的是为什么Dice是有状态的(即为什么它有一个面值而不是返回它滚动的值)。 -
因为 faceValue 属性是描述骰子状态的东西,该状态属于骰子类,这就是为什么 faceValue 类变量在骰子类中
-
“2”代表模具数还是卷数?
-
@NicholasK 骰子数
-
@Vivick 我的骰子都是有状态的。除非发生地震,否则我上次扔它们时,它们会保持正面朝上。
标签: java oop uml encapsulation ooad