簡體   English   中英

Java設計幫助。 繼承和共享代碼

[英]Java design help. Inheritance and sharing code

我在編程開發方面仍然有點不適應,並且在進行簡潔的設計時遇到了一些麻煩。 具體來說,我有以下情況:

我有4個班級,每個班級都有共同的功能。 讓我們將這些方法稱為A,B,C等。

類別:帳戶; 方法:A,B,C,G,H,I,S1,S2,S3
類別:資料夾; 方法:A,B,C,D,E,S1,S2,S3
類:組; 方法:A,B,C,D,E,F,S1,S2,S3
類:角色; 方法:A,B,C,D,E,F,S1,S2,S3

上面指定的方法是抽象的。 就像其中一樣,可能會有一個FooAccount和BarAccount分別實現方法A。 但是FooAccount和FooGroup具有相同的方法A(因為它們具有相同的實現; Foo)。 還不錯,除了還有一些方法S1,S2和S3,即使在Foo和Bar之間也實現相同,因此FooAccount和BarAccount具有相同的方法S1,S2和S3。

目前我的設計很丑陋:

接口Object1:聲明A,B,C
接口Object2擴展Object1:聲明D,E
接口Object3擴展Object2:聲明F
接口Account擴展Object1:聲明G,H,I
接口Folder擴展了Object2;
接口組擴展了Object3;
接口Role擴展了Object3;
類助手:定義S1,S2,S3

我知道有充分的理由禁止多重繼承,但是如果允許這樣做,我可以將方法S1,S2和S3放入Object1,並將所有接口轉換為抽象。 然后,FooAccount可以擴展Account和FooObject1。

誰能給我一些建議,建議哪種結構更好? 我是否應該將所有A,B,C等放入Util類(例如FooUtil和BarUtil)中?

您應該根據角色(而不是事件)在接口中對方法進行分組。 因此,假設ABC屬於一個角色, DE屬於另一個角色, F屬於它自己

interface Role1 - A, B, C
interface Role2 - D, E
interface Role3 - F
interface Account extends Role1
interface Folder extends Role1, Role2
interface Group extends Role1, Role2, Role3

如果您具有方法的通用實現,則可以將其移至提供默認實現的抽象基類。

abstract class Helper - S1, S2, S3

然后你可以聲明你的具體課程

class FooAccount extends Helper implements Account

如果可以提取FooBar共同行為並使Account為泛型類(采用FooBar )而不是接口,則也可以考慮使用泛型。

不要將繼承作為減少重復代碼的機制。 相反,找出一種將職責划分為單獨的類的方法。

FooAccount和FooGroup具有相同的方法A

這告訴我方法A的實現屬於其自己的類( FooA )。 如果AccountGroup公開方法A確實有意義,則FooAccount.AFooGroup.A的實現應該只是傳遞給FooA.A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM