首页 > 解决方案 > 实现不违反封装的 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 最佳实践并且不违反封装?

特别是在将掷骰子委托GamblerDice班级时是否正确Gamblerroll()方法?

标签: javaoopumlencapsulationooad

解决方案


你的设计基本上是正确的。唯一的就是属性-前面的缺失。faceValue我不确定缺少的指标是否默认为某些东西(乍一看无法找到和指示)。无论如何,您应该添加它以使其明确。

另外,Dice应该重命名为Die(单数)。

最后(更深入地研究你的代码)你需要一个Die包含 2 个元素的数组,而不仅仅是一个dice,你需要掷两个骰子。


推荐阅读