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

标签 java oop

我在编程开发方面仍然有点菜鸟,在进行简洁的设计时遇到了一些麻烦。具体来说,我有如下场景:

我有 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)中的方法进行分组。所以假设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) 而不是接口(interface)

关于Java设计帮助。继承和共享代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106109/

相关文章:

java - 客户端-服务器程序不起作用

javascript - 类/对象实例化后,javascript 如何调用新添加的方法?

javascript - 创建自定义对象的二维数组

delphi - 如何在Delphi中支持接口(interface)定义中的类方法

java - 从 java 服务器向 c++ 客户端发送数据时出现 NullPointerException

java - 循环添加 BigInteger java

python - 为什么 super().__init__ 没有自引用?

c# - 比 Unsafe.As 转换到子类更好的方法来解决我的类层次结构问题?

java - 如何修复 java.lang.VerifyError?

java - 从 Java 程序到 Python 程序的自定义输入