第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

getter和setters的設計很差嗎?自相矛盾的意見

getter和setters的設計很差嗎?自相矛盾的意見

慕工程0101907 2019-06-19 17:19:23
getter和setters的設計很差嗎?自相矛盾的意見目前,我正在用幾種不同的模式在Java中開發(fā)一個簡單的游戲。我擴展了一個主游戲類,將主邏輯放在其他類中。盡管如此,主要的游戲類仍然相當龐大。在快速查看我的代碼之后,大部分代碼是getter和Setters(60%),而其他代碼則是游戲邏輯真正需要的。一些Google搜索聲稱getter和Setters是邪惡的,而其他的則聲稱它們對于良好的OO實踐和偉大的程序是必要的。那我該怎么辦?應該是哪一個?我是應該為我的私有變量更改getter和Setter,還是應該繼續(xù)使用它們?
查看完整描述

4 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

還有一種觀點認為,大多數(shù)情況下,使用setters仍然可以通過設置毫無意義的值來破壞封裝。作為一個很明顯的例子,如果你在游戲中有一個得分計數(shù)器,它只會上升,而不是

// Gameprivate int score;public void setScore(int score) { this.score = score; }public int getScore() { return score; }
// Usagegame.setScore(game.getScore() + ENEMY_DESTROYED_SCORE);

應該是

// Gameprivate int score;public int getScore() { return score; }public void addScore(int delta) { score += delta; }
// Usagegame.addScore(ENEMY_DESTROYED_SCORE);

這也許是一個簡單的例子。我想說的是,討論getter/setters與公共字段通常會掩蓋更大的問題,對象以一種親密的方式操縱彼此的內部狀態(tài),因此過于緊密地耦合在一起。

這樣做的目的是讓那些直接做你想做的事情的方法。一個例子就是如何設置敵人的“活著”地位。您可能會有一個setAlive(布爾活動)方法。相反,你應該:

private boolean alive = true;public boolean isAlive() { return alive; }public void kill() { alive = false; }

這樣做的原因是,如果您更改的實現(xiàn)不再具有“活動”布爾值,而是具有“命中點”值,則可以在不破壞前面編寫的兩種方法的約定的情況下對其進行更改:

private int hp; // Set in constructor.public boolean isAlive() { return hp > 0; } // Same method signature.public void kill() { hp = 0; }
 // Same method signature.public void damage(int damage) { hp -= damage; }


查看完整回答
反對 回復 2019-06-19
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

  • 非常邪惡:公共領域。
  • 有點邪惡:getter和setter在不需要的地方。
  • 很好:getter和setter只有在它們真正需要的地方才會出現(xiàn)-使類型暴露“更大”的行為,而這種行為發(fā)生在

    使用

    它的狀態(tài),而不僅僅是將類型視為要被其他類型操作的狀態(tài)存儲庫。

這真的取決于情況-有時候你真的只是想要一個愚蠢的數(shù)據(jù)對象。


查看完整回答
反對 回復 2019-06-19
  • 4 回答
  • 0 關注
  • 606 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號