java - 实现不违反封装的 OOP 委托
问题描述
这是一个关于赌博的简单场景。
有一个赌徒和骰子。赌徒可以掷骰子。然后骰子值会改变
对于上述场景,我创建了这个类图
如上图所示
赌徒可以掷骰子,它在赌徒掷骰子时实现在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()
方法?
解决方案
你的设计基本上是正确的。唯一的就是属性-
前面的缺失。faceValue
我不确定缺少的指标是否默认为某些东西(乍一看无法找到和指示)。无论如何,您应该添加它以使其明确。
另外,Dice
应该重命名为Die
(单数)。
最后(更深入地研究你的代码)你需要一个Die
包含 2 个元素的数组,而不仅仅是一个dice
,你需要掷两个骰子。
推荐阅读
- python - 模块独立工作,但导入时出现错误
- python - 需要帮忙 !!关于理解错误“ TypeError: len() 没有关键字参数”
- c# - 如何从数据库对象创建特定视图?ASP.NET MVC
- android - 在 Jetpack Compose 的文本组件中显示新行
- swift - 添加一个 CAShapeLayer 很快就会越界
- c# - 具有用户定义类型的通用方法
- php - 如何将 preg_replace 中的参数传递给 PHP 中的函数?
- javascript - 在 localhost 上部署后的 Vue 应用程序是空白的
- html - 可点击按钮移动另一个选项卡
- javascript - 无法在另一个 .jsp 文件中捕获通过表单输入的值。为什么?