类设计问题[可选实现]
我想知道如何设计一个系统,其中我有一个 Super 类和几个 Super 的子类类(比如说 Sub1、Sub2、Sub3),并且我想要一个 Cool 类。现在我想要有两件事:
有什么建议吗?提示?
I was wondering how to design a system in which I have a class Super and a couple of classes that are subclasses of Super (let's say Sub1, Sub2, Sub3) and I want a class Cool. Now there are two things I want to have:
Any suggestions? Hints?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
阿恩的回答有点符合你的要求,但我发现它过于复杂。也许我错过了什么?为什么不只是:
Arne's answer kind of does what you want, but I find it overly complicated. Maybe I'm missing something? Why not just:
也许是这样的:
Maybe something like this:
您可以创建一个标记界面,说很酷。
让 Sub1 和 Sub2 类实现这个接口
在添加到列表之前检查是否很酷,
这可能会有所帮助。
You can create an marker interface say cool.
Let class Sub1 and Sub2 implements this interface
and before adding to the list check for instance of cool
may be this can help.
你不能让一个类选择性地属于 Java 中的某个类型。尽管您可以对 Sub1 进行子类化,其中一个子类实现了 Cool 接口,而另一个则没有:
您也可以放弃 Cool 概念并使用访问者模式:
You can't have a class optionally belonging to a type in Java. Though you may subclass Sub1, with one subclass implementing an interface Cool and the other not:
You might also discard the Cool concept and use a visitor pattern:
IMO,您需要有一个重写的列表(比如 MyList,它重写了 add())。
在 add() 中,检查要添加的对象是否是 Cool,如果是,则将其添加到列表中。如果不是,那么就优雅地忽略它。
这有帮助吗?
IMO, you need to have a overrided List (Say MyList, that overrides add()).
In add(), Check if the object you are adding is Cool, if it is so, then add it part of the list. If not then just gracefully disregard it.
Does this help?
管理此问题的最简单方法是进一步子类化 Sub1(CoolSub1 和 NotCoolSub1)和 Sub2(CoolSub2 和 NotCoolSub2)。
然后,CoolSub1 和 CoolSub2 可以实现 Cool(Cool 应该是一个接口,而不是一个类)。
然后,您可以定义
哪些接受 Sub1 和 Sub2 的实现,但前提是它们实现了 Cool。
The simplest way you can manage this is to further subclass Sub1 (CoolSub1 and NotCoolSub1) and Sub2 (CoolSub2 and NotCoolSub2).
CoolSub1 and CoolSub2 can then implement Cool ( Cool should be an interface and not a class)
You can then define
which will accept implementations of Sub1 and Sub2, but only if they implement Cool.