首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >此表单生成器是有效的复合GoF吗?

此表单生成器是有效的复合GoF吗?
EN

Software Engineering用户
提问于 2020-02-29 15:31:39
回答 1查看 68关注 0票数 1

为了寻找一个好的PHP真实世界示例,我找到了这个“复合”的示例,它使用:

  • FormElement作为组件
  • 字段集和表单作为容器
  • 输入为叶

(这是代码中的UML ):

那么,这个表单生成器是一个有效的复合GoF吗?

EN

回答 1

Software Engineering用户

发布于 2020-03-01 04:06:02

根据Gof的组合模式,目的是

将对象组合成树结构,以表示部分的整体层次结构。组合使客户能够统一地处理单个对象和对象的组合。

如果我们与您的示例进行比较,GoF模式涉及:

  • 声明结构中所有对象的公共接口的Component。在你的例子中是FormElement
  • 实现Leaf接口的Component类。在你的例子中,它是Input
  • 实现Composite接口并可能具有子组件的Component类。在你的例子中,它是FieldComposite。您的案例通过具有一个抽象的组合(可以专门用于FieldSetForm )来增加一个复杂程度。

因此,您的类在不影响以下评论的情况下,形成了GoF组合的一个很好的示例:

  • FormElement重命名为FormComponent将有助于映射到GoF参与者。
  • FormElement不实现子管理操作。尽管GoF建议在组件级别声明它们,但它将其保留为开放实现问题,即是在Component还是Composite级别进行声明。
  • 通常,组件还应该允许其子组件访问。其默认实现是不返回任何子级。在这里,您根本没有预见到公开这个访问方法。但它并不妨碍模式的意图。

查看您的图表,我想知道FieldComposite是否提供了render()的默认实现,或者render()是否也应该显示为抽象(斜体),因为它将由更具体的子类型实现。

Remark__:由于您正在寻找一个示例,而不是实际问题的解决方案,所以我不会再次建议您更多地关注一个设计如何解决您的问题,而不是它对已知模式的遵从程度。不过,我完全同意这个意见。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/405935

复制
相关文章
在没有 Mimikatz 的情况下操作用户密码
通过利用Mimikatz的 lsadump::setntlm和lsadump::changentlm函数,过去已经涵盖了这两个用例。虽然Mimikatz是最好的攻击工具之一,但我会尽量避免使用它,因为它是反病毒和 EDR 工具的高度目标。在这篇文章中,我将专门讨论用例 #2 — 为横向移动或权限提升重置密码。
Khan安全团队
2022/03/21
2.1K0
OpenCV 利用滚动条在不缩小的情况下显示大型图片
最近由于项目需要,要在不缩小的情况下显示一张2500*2000大小的图片,找到了一篇博客写的非常好,是邹老师写于2011年的: http://blog.csdn.net/chenyusiyuan/article/details/6565424
chaibubble
2022/05/07
7240
OpenCV 利用滚动条在不缩小的情况下显示大型图片
Sharded:在相同显存的情况下使pytorch模型的参数大小加倍
深度学习模型已被证明可以通过增加数据和参数来改善。即使使用175B参数的Open AI最新GPT-3模型,随着参数数量的增加,我们仍未看到模型达到平稳状态。
deephub
2020/12/24
1.6K0
V-3-3 在没有vCenter的情况下
在使用vSphere客户端登陆到ESXi服务器的时候,由于没有安装vCenter,而发现无法克隆虚拟机。而如果要安装vCenter的Windows版,有时候需要创建多台Windows Server主机,这种时候可以通过复制ESXi datastore里的虚拟机文件来创建多台相同的Windows Server虚拟机。
py3study
2020/01/07
1.1K0
理解JavaScript的临时包装对象
Javascript语言中的对象和基础类型string、number、boolean都可以使用“.”符号访问属性和方法,但是本质上只有对象才可以使用“.”,那么基础类型在使用“.”时的内部机制是什么呢? 这里要引入一个概念:包装对象。 Javascript对象是一个复合值,他是一组属性和方法的集合,使用“.”符号可以直接访问其属性和方法,但是基础类型数据在使用“.”符号时,*Javascript解析器首先调用基础类型对应的构造函数构建一个临时包装对象,然后再访问包装对象的属性。比如以下代码: let str
寒月十八
2018/01/30
9870
JavaScript-包装对象
(2)这7种数据类型中,对象为“引用类型”,其他六种为“原始类型”(或叫“基本类型”)。
WEBING
2019/03/13
6460
JavaScript-包装对象
在没有外链情况下,如何提高PR值?
外链是提高PR值的有利方式,但现在外链建设愈发困难,各家都对自己的网站进行链接屏蔽,即使你的外链建设成功,在代码状态下依然是Nofollow状态,所以seoer对外链格外关注。
蝙蝠侠IT
2021/03/22
5490
在没有外链情况下,如何提高PR值?
C++核心准则​Con.1:默认情况下使对象不可修改
Immutable objects are easier to reason about, so make objects non-const only when there is a need to change their value. Prevents accidental or hard-to-notice change of value.
面向对象思考
2020/08/14
4460
c语言:C语言清空输入缓冲区在标准输入(stdin)情况下的使用
分析:并没有输入字符,直接就输出了“hello bit”,因为在点击回车(‘\n’)时,相当于输入了一个字符,那么我们需要进行清空缓冲区处理
用户7886150
2021/02/14
3.1K0
JavaScript 原始值与包装对象
随着 JavaScript 越来越流行,越来越多地开发者开始接触并使用 JavaScript。
陈皮皮
2021/08/04
9600
vscode 使水平滚动条固定持续显示
1、在编辑器窗口中键盘 ctrl/command + shift + p 2、输入 setting,打开设置(json) 3、在 JSON 文件中加入以下代码:
Leophen
2022/05/07
2.5K0
在没有数据的情况下使用贝叶斯定理设计知识驱动模型
数据是模型的基础,但是没有数据只有领域专家也可以很好地描述或甚至预测给定环境的“情况”。我将根据贝叶斯概率来总结知识驱动模型的概念,然后是一个实际教程,以演示将专家的知识转换为贝叶斯模型以进行推理的步骤。我将使用 Sprinkler 系统从概念上解释过程中的步骤:从知识到模型。最后我将讨论复杂的知识驱动模型的挑战,以及由于质疑和提取知识而可能发生的系统错误。所有示例都是使用 python 的 bnlearn 库创建的。
deephub
2021/10/09
2.2K0
在没有数据的情况下使用贝叶斯定理设计知识驱动模型
用户输入括号是否匹配
public class brackets { /*算法*/ public static boolean isMatch(String str) { int i = 0; char e, x; SqStackClass<Character> st = new SqStackClass<Character>(); //建立一个顺序栈 while (i < str.length()) {
楠羽
2022/11/18
1K0
Harris角点提取后怎么匹配?
对于角点匹配算法的研究本文主要采用Harris算法提取图像中的角点,通过相似测度得到粗匹配点集,然后简单分析了两种提纯匹配点的简单聚类法和视差梯度约束法。 1. Harris算法角点检测 人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一
智能算法
2018/04/03
2.5K0
Harris角点提取后怎么匹配?
JavaScript 原始值与包装对象
随着 JavaScript 越来越流行,越来越多地开发者开始接触并使用 JavaScript。
陈皮皮
2022/03/29
9200
在没有 'try-with-resources' 语句的情况下使用 'xxx' 是什么意思
在没有使用 try-with-resources 语句的情况下使用 xxx,意味着在代码中没有显式地关闭 xxx对象资源,如果没有使用 try-with-resources,那么在使用xxx对象后,需要手动调用 close() 方法关闭xxx对象以释放资源,防止资源泄露。
高久峰
2023/09/30
4.4K0
html滚动条使用,以及页面有多个div块,如何让body页面不使用滚动条,只在某个div内使用滚动条
2,页面有多个div块,如何让body页面不使用滚动条,只在某个div内使用滚动条
全栈程序员站长
2022/08/05
4.8K0
html滚动条使用,以及页面有多个div块,如何让body页面不使用滚动条,只在某个div内使用滚动条
多个Promise对象的处理
如果某件事情需要依照多个对象完成后才能执行,那么我们可以使用Promise.all来管理,将这些状态全部执行完毕后才执行下一个!
十月梦想
2018/10/09
1.1K0
神兵利器 - 在没有任何权限的情况下破解任何 Microsoft Windows 用户密码
项目地址:https://github.com/DarkCoderSc/win-brute-logon
Khan安全团队
2022/04/02
1.7K0
神兵利器 - 在没有任何权限的情况下破解任何 Microsoft Windows 用户密码
点击加载更多

相似问题

TypeError:无法读取未定义的属性(读取“长度”)- Blockchain

11

如何使用Rust SDK在Aptos上执行移动脚本?

113

如何使用Aptos CLI执行移动脚本?

18

如何读取Blockchain数据( .dat和.ldb文件)?

10

如何在Spark Structured Streaming中读取Kafka和查询外部存储,如Cassandra?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文