[英]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)中?
您應該根據角色(而不是事件)在接口中對方法進行分組。 因此,假設A
, B
, C
屬於一個角色, D
和E
屬於另一個角色, 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
如果可以提取Foo
和Bar
共同行為並使Account
為泛型類(采用Foo
和Bar
)而不是接口,則也可以考慮使用泛型。
不要將繼承作為減少重復代碼的機制。 相反,找出一種將職責划分為單獨的類的方法。
FooAccount和FooGroup具有相同的方法A
這告訴我方法A的實現屬於其自己的類( FooA
)。 如果Account
和Group
公開方法A
確實有意義,則FooAccount.A
和FooGroup.A
的實現應該只是傳遞給FooA.A
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.