因此,例如,这是当前代码工作方式的说明。我知道这可能不是复合材料的完美表示,但是我不确定还有什么称呼它:

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

10-07 13:52
查看更多