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

本文关键字:复合 有方法 模式 叶子 | 更新日期: 2023-09-27 18:30:27

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

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

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

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

而在叶类中,没有forloop是一样的。

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

我考虑过让叶类和复合类继承这种方法,可以吗?我也考虑过在叶类中制作这种方法,并使堆肥类制作一片叶子,这是它本身,这意味着复合类总是至少有 1 片叶子。

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

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

我更喜欢仅在复合类中实现添加/获取/删除方法,因为叶节点永远不会实现它们。但是,这样做的缺点是强制您区分叶节点和非叶节点,但这两种方法都没有错。

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