我有几个具有自己的属性和方法的类(比如叶类)。我想创建这些叶类的对象,并使它们成为其他类的成员(比如复合类)。每个复合类都有可变数量的叶对象和一些方法。我应该能够轻松地创建复合类的对象并访问该复合类中的方法。但是如何访问复合类中包含的叶类对象的方法?
interface Leaf{
//methods common to all leaf classes
}
class LeafA implements Leaf{
//attributes
// interface method implementations
//methods unique to this class
}
class LeafB implements Leaf{
//attributes
// interface method implementations
//methods unique to this class
}
class LeafC implements Leaf{
//attributes
// interface method implementations
//methods unique to this class
}
interface Composite{
//common methods
}
class CompositeOne implements Composite{
//attributes
//list of one or more leaf objects
//methods unique to this class
}
class CompositeTwo implements Composite{
//attributes
//list of one or more leaf objects
//methods unique to this class
}
我怀疑如何使用复合类的对象访问叶类中的方法。
答案 0 :(得分:0)
您的Composite
界面的用途与Leaf
类型的用途不同。这就是为什么在Leaf
中处理Composite
操作的方法不是一个好主意(问题没有分开)的原因。尽管如此,这在技术上是可行的,尽管这只是一个值得怀疑的设计决定。
您可能拥有的另一个选择是创建一个不同的界面,该界面是关于在复合级别类中执行您要对Leaf
实例执行的常见复合级别事务。例如:
interface LeafProcessor {
void processLeaves();
}
然后,您可以通过当前的CompositeOne
和CompositeTwo
类来实现此界面。例如:
class CompositeOne implements Composite, LeafProcessor{
//attributes
Leaf leafA = new LeafA();
//methods unique to this class
@Override
public void processLeaves() {
this.leafA.doSomething();
}
}
请注意,此类实现了2个接口。当然,这个事实可能需要CompositeOne
类的新名称。
您必须决定您决定实施此项目的方式(例如只有CompositeLeafAProcessor
等实例的LeafA
。)