Java设计帮助.继承和共享代码

我在编程开发方面仍然是一个noobie,并且在制作一个干净的设计时遇到了一些麻烦.具体来说,我有一个场景如下:

我有4个类,每个类都有共同的功能.让我们称这些方法为A,B,C等.

课程:帐户;方法:A,B,C,G,H,I,S1,S2,S3
class:文件夹;方法: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

上面指出的方法是抽象的.因为可能存在以不同方式实现方法A的FooAccount和BarAccount.然而,FooAccount和FooGroup具有相同的方法A(因为它们具有相同的实现; Foo).还不错,除了还有一些方法S1,S2和S3甚至在Foo和Bar之间实现相同,因此FooAccount和BarAccount具有相同的方法S1,S2和S3.

目前我的设计非常难看:

interface Object1:声明A,B,C
interface Object2扩展Object1:声明D,E
interface Object3扩展Object2:声明F
interface Account extends Object1:声明G,H,I
interface Folder扩展Object2;
interface Group扩展了Object3;
interface Role扩展Object3;
class Helper:定义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)而不是接口

点赞