我试图弄清楚为什么复合比简单的继承更好.
例如,假设我们要实现文件系统.所以基本上我们需要文件和文件夹.我们可以使用复合模式,File而Folder类继承基接口,Folder类包含接口类型集合.
但看起来(对我来说)简单的继承可以做同样的事情.如果File是根类并Folder继承自File,则Folder可以保存Files的集合,故事结束.
我错过了什么吗?
如果File是根类而Folder继承File,则Folder可以包含Files集合
这本质上是复合模式,即使你不这样称它:-)
除了在您的变体中,Folder将继承文件特定的功能,它不能(或更糟:不应该)使用.因此,您最终会使实现变得复杂,以确保客户端无法将字节附加到文件夹的"结尾"等.
仅供参考,GoF书籍Pattern Hatching的续集,讨论了使用各种模式(包括Composite)的文件系统的实现.强烈建议阅读.