亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實現不違反封裝的 OOP 委托

實現不違反封裝的 OOP 委托

慕標琳琳 2021-11-17 14:39:51
這是一個關于賭博的簡單場景。有一個賭徒和骰子。賭徒可以擲骰子。然后骰子的值會改變對于上述場景,我創建了這個類圖如上圖賭徒可以擲骰子, 在賭徒擲骰子時在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并且您需要同時擲兩個骰子。


查看完整回答
反對 回復 2021-11-17
?
料青山看我應如是

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];

     }

}

當然,這取決于實際需求。


查看完整回答
反對 回復 2021-11-17
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號