無論我將在這個答案中描述純粹是我的意見和主觀。
以下點必須設計這個時要牢記:
- 任何方法加入到申報(或任何一般超)應適用於所有亞型不管。
- 一種方法應該描述類的行爲,類能夠「做」的東西。
2點解釋
想方法postClass.remove()
,它可以作爲閱讀的 'A PostClass
知道如何刪除......'。但刪除什麼?本身?來自哪裏?
對我來說,'去除'和'恢復/添加'似乎是可以在PostClass
或CommentClass
的Collection
上完成的東西,而不是這些類自己做的事情。如果我猜對了,這確實是如何在你的應用程序中使用PostClass
和CommentClass
(即某種Collection
)。現在,PostClass
或CommentClass
可以獲得回撥onRemove()
,,onHide()
或onShow()
,以便在執行刪除/恢復/隱藏/顯示時執行每項操作所需的操作。
優勢的回調是,如果一個班級不打算在行動中做一些特別的事情,他們可以選擇致電super
。
設計1 - 你的應用程序的可報告已被隱藏,顯示的行爲,恢復和刪除
所以,對於所有的「報告」,你可以將這些回調添加到Reportable
接口本身。
public interface Reportable {
void report();
boolean isReported();
void onRestore();
void onRemove();
void onHide();
void onShow();
}
用法可能是這樣的
public class User {
private List<Reportable> reports;
//... more User related code
public void deleteReport(Reportable report) {
//give report a chance to cleanup
report.onDelete();
//delete from user's list of reports
this.reports.remove(report);
//more code
}
設計2 - 有獨立的接口
public interface Viewable {
void onHide();
void onShow();
}
public interface Disposable {
void onRemove();
void onRestore();
}
public class PostClass implements Reportable, Disposable {
}
public class CommentClass implements Reportable, Viewable {
}
使用情況,這是非常自我解釋,我猜。
我喜歡設計2,因爲它似乎更乾淨,堅持「SOLID」的設計原則。
希望這會有所幫助。
我會爲方法找到很好的命名,以便它可以用於發佈和評論。所以我只能在我的界面中使用這兩種方法。 –
@Luminous_Dev這些方法描述了實際存在的應用程序邏輯,我需要這些方法反映這些方法,因此它對我和其他人都有意義。 –
如果這兩個(四個?)方法與其中一個或另一個實現類無關,那麼它們如何「邏輯地融入相同的接口」?似乎是一個矛盾。 'Reportable'中的每個方法或者邏輯地應用於所有'Reportable'對象,或者該方法不屬於'Reportable'。 –