为了寻找一个好的PHP真实世界示例,我找到了这个“复合”的示例,它使用:
(这是代码中的UML ):
那么,这个表单生成器是一个有效的复合GoF吗?
发布于 2020-03-01 04:06:02
根据Gof的组合模式,目的是
将对象组合成树结构,以表示部分的整体层次结构。组合使客户能够统一地处理单个对象和对象的组合。
如果我们与您的示例进行比较,GoF模式涉及:
Component
。在你的例子中是FormElement
Leaf
接口的Component
类。在你的例子中,它是Input
。Composite
接口并可能具有子组件的Component
类。在你的例子中,它是FieldComposite
。您的案例通过具有一个抽象的组合(可以专门用于FieldSet
和Form
)来增加一个复杂程度。因此,您的类在不影响以下评论的情况下,形成了GoF组合的一个很好的示例:
FormElement
重命名为FormComponent
将有助于映射到GoF参与者。FormElement
不实现子管理操作。尽管GoF建议在组件级别声明它们,但它将其保留为开放实现问题,即是在Component
还是Composite
级别进行声明。查看您的图表,我想知道FieldComposite
是否提供了render()
的默认实现,或者render()
是否也应该显示为抽象(斜体),因为它将由更具体的子类型实现。
Remark__:由于您正在寻找一个示例,而不是实际问题的解决方案,所以我不会再次建议您更多地关注一个设计如何解决您的问题,而不是它对已知模式的遵从程度。不过,我完全同意这个意见。
https://softwareengineering.stackexchange.com/questions/405935
复制相似问题