因此,例如,这是当前代码工作方式的说明。我知道这可能不是复合材料的完美表示,但是我不确定还有什么称呼它:
public interface MyInterface {
public void doSomething();
public void doSomethingElse();
}
public class MyComposite implements MyInterface {
private MyLeaf myLeaf = new MyLeaf();
public void doSomething() {
// Do something...
}
public void doSomethingElse() {
// Do something else...
myLeaf.doSomethingElse();
}
}
public class MyLeaf implements MyInterface {
public void doSomething() {
// Do something...
}
public void doSomethingElse() {
// Do something else...
}
public void doAnotherSomething() {
// Do another something...
}
}
public class Program {
public static void main(String[] args) {
MyComposite myComposite = new MyComposite();
myComposite.doSomething();
myComposite.doSomethingElse();
// I can't do this right now...
// myComposite.doAnotherSomething();
}
}
我的观点是简单地完全打开对叶子对象的访问并仅返回实例,然后调用代码可以对其执行任何操作。但是,我想知道这样做是否有弊端。
最佳答案
这是在告诉您您的设计有问题。您的意思是,继承层次结构中较低层次的方法需要在较高层次上可见。您的界面应表示可以在实现上执行的所有操作。另外,您的示例可能是Adapter而不是Composite。