复合模式,叶子和复合中的私有方法?

时间:2014-11-15 16:32:54

标签: c# composite

我在弄清楚复合模式时遇到了一些麻烦。

截至目前,我有一个接口,其中包含应该在leaf和composite中的方法,例如void PrintName()方法。这是正确的吗?或者接口是否也应包含仅复合方法,如AddChild等。

在我的复合类中,PrintName()方法如下所示:

public void PrintName(){
Console.WriteLine(_name);
foreach(Child c in List) c.PrintName();
}

在叶子类中,没有forloop就是一样。

这似乎没问题,直到我需要私有方法。因为现在,我必须在叶子和复合类中完全编写相同的私有方法。如果我决定更改/重构其中一个,这需要我记住保持两者。

我已经考虑过使叶子和复合类继承这种方法,这样可以吗? 我还考虑过在叶子类中创建这种方法,并使composte类创建一个叶子,这本身就意味着复合类总是至少有一片叶子。

复合模式的最佳实践是什么?

1 个答案:

答案 0 :(得分:1)

我更喜欢在Composite类中实现add / get / remove方法,因为叶节点永远不会实现它们。但是这有一个缺点,就是强迫你区分叶子节点和非叶子节点,但这两种方法都不对。

对于私有方法复制,您可以使用受保护的访问修饰符创建一个实现所需操作的新类,以便它在外部世界中不可见,并且让Composite节点和叶节点都继承它。这样就可以避免重复使用常用功能。