Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 拉取数据而不是推送数据的设计模式?_Design Patterns - Fatal编程技术网

Design patterns 拉取数据而不是推送数据的设计模式?

Design patterns 拉取数据而不是推送数据的设计模式?,design-patterns,Design Patterns,我正在学习观察者模式,这让我产生了一个问题:是否有一种模式会产生相反的效果 我可以从一组可观察的物体中提取变化 假设我有一个数独游戏,当我输入一个数字时,我想确认同一行、列或正方形中没有其他框具有相同的数字 是否有一种模式可以配置可观察框列表并提取其当前值?是的,您至少有两个选项: 1- 如果希望在不更改对象的情况下对对象执行操作,则此模式非常有用。您可以为数独中的每个单元格定义一个对象,并让预定义的访问者访问它。为此,例如,您可以在预定义的对象列表(映射)中递归地查找下一个对象,然后执行所需的

我正在学习观察者模式,这让我产生了一个问题:是否有一种模式会产生相反的效果 我可以从一组可观察的物体中提取变化

假设我有一个数独游戏,当我输入一个数字时,我想确认同一行、列或正方形中没有其他框具有相同的数字


是否有一种模式可以配置可观察框列表并提取其当前值?

是的,您至少有两个选项:

1- 如果希望在不更改对象的情况下对对象执行操作,则此模式非常有用。您可以为数独中的每个单元格定义一个对象,并让预定义的访问者访问它。为此,例如,您可以在预定义的对象列表(映射)中递归地查找下一个对象,然后执行所需的操作。一个好的选择是将其与应用程序结合使用

2- 如果希望每个单元格执行操作并控制算法,则此模式非常有用。您应该创建链式结构,在当前单元格执行“比较值”操作后,执行此验证时递归调用链


正如我所说的,如果你想“反转”观察者的行为,这两种方法都很有用。

我认为它通常被称为“拉”或“轮询”,可能类似于一个链接,其中每个框都是链中的一个链接,有机会决定输入的数字是否有效。每行、每列和每平方的链都可以预先计算并存储在地图中,以便快速查找。访客模式用于实现双重分派。如果只有一种具体类型,即拼图中的每个框都是相同的,则没有意义。@jaco0646,责任链可能会陷入同一个问题:根据框的类型和评估功能,不能充分利用。提出的问题是,与观察者模式相比,这种方法的工作方向不同。我认为那些人达到了目标