gpt4 book ai didi

language-agnostic - 构建器是否应该在交付产品后重置其构建环境

转载 作者:行者123 更新时间:2023-12-04 08:58:27 25 4
gpt4 key购买 nike

我正在实现一个构建器,其中通过调用 Builder::getProduct() 检索可交付成果。 director 要求各个部分构建 Builder::buildPartA() , Builder::buildPartB() 等以完整构建产品。
我的问题是,一旦 Builder 通过调用 Builder::getProduct() 交付了产品,它是否应该重置其环境 (Builder::partA = NULL;, Builder::partB = NULL;) 以便它准备好构建另一个产品? (具有相同或不同的配置?)

我问这个是因为我正在使用 PHP,其中对象默认通过引用传递(不,我不想 clone 它们,因为它们的字段之一是 Resource )。但是,即使您从与语言无关的角度思考,Builder 是否应该重置其构建环境?如果您的回答是“视情况而定”,哪些用例可以证明重置环境(以及其他方式)是合理的?

为了提供代码示例,这里是我的 Builder::gerProcessor(),它显示了我所说的重置环境

的意思
/**
* @see IBuilder::getProessor()
*/
public function getProcessor()
{
if($this->_processor == NULL) {
throw new LogicException('Processor not yet built!');
} else {
$retval = $this->_processor;
$this->_product = NULL, $this->_processor = NULL;
}
return $retval;
}

最佳答案

getProcessor() 中重置状态是不明显的,如果你想这样做,该方法应该在它的名称中反射(reflect)出来,例如getProcessorAndReset()。一个更简洁的解决方案是只为构建器提供一个单独的 reset() 方法。

一般来说,您的 getProcessor() 不应该重置它的内部状态,因为方法不应该神奇地改变行为,而是可靠地做同样的事情。 getProcessor() 是一个查询,该查询应该在每次调用时返回相同配置的处理器。它不应该改变状态。重置状态是一个命令。你想separate command and query methods .

关于language-agnostic - 构建器是否应该在交付产品后重置其构建环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8292575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com