我是一个编程开发的新手,目前在进行清晰的设计方面遇到了一些困难。具体地说,我有如下场景:
有4个类,每个类都有共同的功能,我们叫这些方法为A、B、C等。
类:Account;方法:A、B、C、G、H、I、S1、S2、S3
类:Folder;方法:A、B、C、D、E、S1、S2、S3
类:Group;方法:A、B、C、D、E、F、S1、S2、S3
类:Role;方法:A、B、C、D、E、F、S1、S2、S3
上述的方法是抽象的,也就是说可能会有不同的FooAccount和BarAccount分别实现A方法。然而,由于它们是相同实现的Foo,因此FooAccount和FooGroup也具有相同的A方法。虽然这不算太糟糕,但是还有一些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;
接口Group扩展自Object3;
接口Role扩展自Object3;
类Helper:定义S1、S2、S3方法
我知道多重继承是有好的理由禁止的,但如果允许我这样做,我可以将S1、S2和S3方法放入Object1中,并将所有接口转换为抽象接口。然后FooAccount可以同时扩展Account和FooObject1。
有人能给我一些建议吗?哪种结构可能更好?我该将所有A、B、C等方法都放入一个Util类(例如FooUtil和BarUtil)中吗?
Foo
(也可以是Bar
)的类中实现A
方法,并将其传递给Account
等实现类,这些实现类将调用传递对象的A
方法。这样,实现就足够通用,你可以轻松地创建一个名为FooBar
的类,并正确地捕获共享代码。 - Attila