2016-02-28 23 views
2

我正在嘗試創建具有不同用戶的聊天應用程序:簡單用戶,VIP用戶等。創建不同用戶類的正確設計方法

所有類型的用戶都將擁有簡單用戶擁有的數據,如:姓名,密碼,電子郵件等,但所有其他用戶類型都只有他們的唯一選項。

我想創建SimpleUser類,它將具有通過使用私有變量,getters/setters等實現的基本功能,而所有其他用戶類型將擁有自己的類來擴展SimpleUser類並添加它們的唯一標識符功能。

但我看到這篇文章後 Do subclasses inherit private fields?它似乎不正確的做法。

我不確定使用接口來提供可選功能將有所幫助,因爲我仍然在每個用戶類型中使用getters/setters訪問私有變量。

當前我在每一個屏幕上都會看到用戶的類型(爲了選擇適合他的選項),它看起來很笨重,有沒有辦法只檢查一次用戶的類型(當用戶登錄)並在所有屏幕上使用他的uniqe功能?

  • 什麼是設計我的類的正確方法?

  • 是他們解決我的兩個問題的方法嗎?

+0

與簡單用戶和VIP用戶有什麼不同?關注建模行爲,而不是數據。 – plalx

回答

0

或許從另一個側面接近的東西,而不是去想用戶,也許想想屏幕,每個用戶都有一個「級別」和屏幕提供了每個級別的功能,如真正的功能是不是真的用戶的屏幕,屏幕只是基於用戶決定的。

我想我會與一個枚舉與SimpleVIP等等,這個枚舉將有方法爲那個級別的用戶做適當的事情。

+0

你是對的,但是每個人都有相同的屏幕,只有一些功能發生變化,並且一些字段出現/消失。 –

+0

然後,它觸發我屏幕負責,所以,如果你有一個大廳屏幕,它已知道如何繪製自己的登錄用戶的'''用戶',決定在用戶​​的「水平」,如果'用戶必須瞭解如何控制屏幕,每添加一個新的屏幕,屏幕都會改變用戶類。例如,你可以有一個配置對象'''LobbyConfig'',它可以爲用戶級別返回適當的配置。 – Gavin

+0

你是對的,但每個人都有相同的屏幕,只有一些功能發生變化,並且一些字段出現/消失。如果我使用Enum與方法如何確認只有「正確」類型的Enum可以使用該方法?也從我在OOP中學到的東西(也許我誤解),它不是創建Type(Class,Enum等)的最好方法,他的對象的一部分(在我們的例子中是Enums)從來不使用他的某些功能。 –