Composite Pattern优于简单继承的好处

Avi*_*Avi 1 design-patterns

我试图弄清楚为什么复合比简单的继承更好.

例如,假设我们要实现文件系统.所以基本上我们需要文件和文件夹.我们可以使用复合模式,FileFolder类继承基接口,Folder类包含接口类型集合.

但看起来(对我来说)简单的继承可以做同样的事情.如果File是根类并Folder继承自File,则Folder可以保存Files的集合,故事结束.

我错过了什么吗?

Pét*_*rök 7

如果File是根类而Folder继承File,则Folder可以包含Files集合

这本质上是复合模式,即使你不这样称它:-)

除了在您的变体中,Folder将继承文件特定的功能,它不能(或更糟:不应该)使用.因此,您最终会使实现变得复杂,以确保客户端无法将字节附加到文件夹的"结尾"等.

仅供参考,GoF书籍Pattern Hatching的续集,讨论了使用各种模式(包括Composite)的文件系统的实现.强烈建议阅读.

  • @Avi,不同之处在于,在经典的Composite中,层次结构的基础是一个接口或抽象类(让我们称之为Node),由Folder和File实现.因此,后者将是真正不同的类型,而不是您的设计,其中Folder*是*文件. (2认同)