![]() |
1
1
物体
这与中描述的“跟踪器”思想类似
mdma's answer
. 状态对象被内省的深度取决于客户端。一个不在乎细节的客户可以检查
|
![]() |
2
1
返回值不是该方法唯一的out值,您可以使用“out”参数,或者将其他对象作为引用传递。例如,除了要验证的输入之外,您还可以向方法传递一个附加的对象-“跟踪器”,该方法会用输入的有效性和状态更改的详细信息填充该对象。 您仍然可以保留布尔值作为一般的成功/失败标志。有些客户机可能不关心细节,只依赖于返回值,为跟踪器传递一个空引用。其他客户端可能需要所有详细信息,因此只使用跟踪器来确定状态是否已更改。 关键的是,通过允许客户机传入跟踪程序,客户机可以指示要收集多少详细信息,并决定如何处理这些信息。其中一些可能计算成本很高,或者需要占用大量内存。使用tracker作为参数,而不仅仅是返回值,允许客户机提供最合适的实现。tracker类可以包含客户机设置的标志和其他信号,这些信号向验证器指示客户机希望从验证中获得什么信息。 为了方便起见,您还可以使用一个返回跟踪器的方法,但这实际上是语法上的甜点。E、 g.(在psudo java中)
无论您选择哪种方法,您都应该能够避免在类之外重复验证行为。 在对象上分离出一个“validate”方法也很有用,该方法可以验证输入,但实际上不会改变状态。当预先验证输入时,例如在UI中启用OK按钮时,此模式非常有用。 |
![]() |
3
0
|
![]() |
4
0
为什么不使用策略或模板方法模式之一呢。 我会选择模板方法。假设你的函数有复杂的逻辑,输入参数是一个接口 |
![]() |
5
0
On think可以使用lambda/closure(取决于您需要什么)。 在smalltalk这里你做什么。
在这里你可以看到,每当你在字典里找不到什么东西时,你就对块进行求值。 这可能适用于您的问题:每当您不验证输入时,请询问发送者通过评估闭包来做什么。
|
![]() |
Schadre · C-plus编码错误 2 年前 |
![]() |
Nithin K · 即使类属性的类型正确,也会获取异常 2 年前 |
![]() |
amirreza870 · Python OOP-更改类文本 2 年前 |
![]() |
A_K · 使用cat或打印方法打印部分内容的子集闭包 2 年前 |
![]() |
Mo Fatah · 如何使用Python类打印数独板? 3 年前 |