我在编程开发方面仍然有点菜鸟,在进行简洁的设计时遇到了一些麻烦。具体来说,我有如下场景:
我有 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。
目前我的设计很丑:
接口(interface) Object1: 声明 A、B、C
interface Object2 extends Object1: declares D, E
接口(interface) Object3 extends Object2: 声明 F
接口(interface) Account extends Object1: 声明 G, H, I
接口(interface)文件夹扩展了Object2;
接口(interface)组扩展 Object3;
interface Role extends Object3;
类Helper:定义S1、S2、S3
我知道多重继承是有充分理由被禁止的,但如果我被允许这样做,我可以将方法 S1、S2 和 S3 放入 Object1 并将所有接口(interface)都变成抽象。然后 FooAccount 可以扩展 Account 和 FooObject1。
谁能给我一些建议,说明哪种结构可能更好?我是否应该将所有 A、B、C 等放入 Util 类(例如 FooUtil 和 BarUtil)?
最佳答案
您应该根据角色而不是出现对接口(interface)中的方法进行分组。所以假设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
) 而不是接口(interface)
关于Java设计帮助。继承和共享代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106109/