我对示例复合类图中通常看到的两个操作有疑问。
* GetDescendents
* GetChild(INT)复合图案设计问题
一个常见的例子是文件和目录,我也有坚持。假设感兴趣的操作是大小,所以文件具有实际大小并且目录具有从GetDescendents的递归迭代派生的大小。到现在为止还挺好。我的问题与客户使用GetDescendents有关。假设你需要某个目录中的文件,这些文件是某些给定操作的图像。因此,在实践中,您使用GetDescendents和Children的一些组合来返回imageFiles(取决于客户端是想要所有嵌套的imageFiles还是仅在根级别)。
所以问题一,是不是你可能有一个组合的GetImageFiles方法,而不是让客户端弄清楚它?假设是这样的,GetDescendents是否可以在组合之外公开给客户端调用者(如ImageViewer)?
关于GetChild(int)的第二个问题;是一个顺序位置索引返回一个单一的孩子?深入GetDescendents的水平?什么是客户如何使用该方法的例子?
干杯,
Berryl
没错。我的问题是,它是否有助于将儿童操作暴露给不属于构图的客户,或者至少与其构成非常密切的关系 - 也就是说,它们是内部操作来生成客户端消费品,如GetFilesOfType ()。 – Berryl 2011-03-24 15:19:51
@Berryl:这取决于你的班级代表什么。 “模式”只是一个实现细节,重要的是“概念”。 – 2011-03-24 15:23:22