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
Design patterns 设计模式建议_Design Patterns - Fatal编程技术网

Design patterns 设计模式建议

Design patterns 设计模式建议,design-patterns,Design Patterns,以下是问题陈述 有n个匹配字符串,如果事件A发生,然后在某段时间内事件B发生,则我不会发出警报。但如果B没有出现,我就必须发出警报。 可以有多个事件链来定义是否发出警报。使用 使用 这部电影。(从你的角度来看)你会有这样的感觉: 当A发生时,将状态更改为B,此时B的发生将重置状态。如果B在初始状态下出现,则发出警报 查看链接文章以了解如何实现此行为。。(从你的角度来看)你会有这样的感觉: 当A发生时,将状态更改为B,此时B的发生将重置状态。如果B在初始状态下出现,则发出警报 查看链接文章以了解如

以下是问题陈述

有n个匹配字符串,如果事件A发生,然后在某段时间内事件B发生,则我不会发出警报。但如果B没有出现,我就必须发出警报。 可以有多个事件链来定义是否发出警报。

使用

使用

这部电影。(从你的角度来看)你会有这样的感觉:

当A发生时,将状态更改为B,此时B的发生将重置状态。如果B在初始状态下出现,则发出警报

查看链接文章以了解如何实现此行为。

。(从你的角度来看)你会有这样的感觉:

当A发生时,将状态更改为B,此时B的发生将重置状态。如果B在初始状态下出现,则发出警报


查看链接文章以了解如何实现此行为。

您的问题陈述是针对软件模块的级别。一个模块通常包含许多类,这些类将以不同的方式相互关联。模式提供了关于这些关系的两种观点,有时还提供了关于如何使用类之间的不同关系实现行为的建议


很可能会涉及某种状态机,尽管这是一种简单的状态机,还是状态对象模式,或者是规则的解释器,或者是通过使用访问者转换规则而创建的过程机;状态是否由轮询数据源或使用观察器触发,系统是否可以由更简单的状态机组成,或者需要某种调度器来同时运行多台机器,这些都取决于比本文中给出的更详细的信息

您的问题陈述类似于软件模块的级别。一个模块通常包含许多类,这些类将以不同的方式相互关联。模式提供了关于这些关系的两种观点,有时还提供了关于如何使用类之间的不同关系实现行为的建议

很可能会涉及某种状态机,尽管这是一种简单的状态机,还是状态对象模式,或者是规则的解释器,或者是通过使用访问者转换规则而创建的过程机;状态是否由轮询数据源或使用观察器触发,系统是否可以由更简单的状态机组成,或者需要某种调度器来同时运行多台机器,这些都取决于比本文中给出的更详细的信息

观察者模式:

var observer = new Observer();
var eventA = new EventA();
var eventB = new EventB();

eventA.register(observer, function() {
    // set off alarm in N amount of time units
});
eventB.register(observer, function() {
    // reset alarm
});
随后,
eventA
eventB
将为所有注册的观察者调用
notify()
,这将触发启动报警倒计时/重置报警的回调

代码是用pesudo javascript编写的。如果您使用的是完整的javascript,只需在回调中使用
setTimeout
cleartimout

我想我应该提到Pub/Sub模式(Observer是其中的一个子集)也是非常好的

观察者模式:

var observer = new Observer();
var eventA = new EventA();
var eventB = new EventB();

eventA.register(observer, function() {
    // set off alarm in N amount of time units
});
eventB.register(observer, function() {
    // reset alarm
});
随后,
eventA
eventB
将为所有注册的观察者调用
notify()
,这将触发启动报警倒计时/重置报警的回调

代码是用pesudo javascript编写的。如果您使用的是完整的javascript,只需在回调中使用
setTimeout
cleartimout


我想我应该提到Pub/Sub模式(Observer是其中的一个子集)也是非常好的

这并不重要,但选择的语言是什么?“n个匹配字符串”是什么意思?这并不重要,但选择的语言是什么?“n个匹配字符串”是什么意思至少解释模式与问题语句的关系至少解释模式与问题语句的关系你的解释听起来更像是一个过程状态机而不是OO状态模式-将int变量设置为1。(它也不符合OP中的规则)“一”=我解释中的“状态:)(或“到一”=“到这样的”)。为更清晰起见进行了编辑。状态对象模式是状态(已发生)处理转换。没有“重置状态”或“如果”条件来测试B出现时是否为初始状态。我想我在建议模式时会知道这一点;)我解释的行为是从“用户角度”出发的,以符合OP的期望。链接页面中显示了如何在内部处理它。还有重置状态-您只需设置初始状态;)您的解释听起来更像是一个过程状态机,而不是OO状态模式——将int变量设置为1。(它也不符合OP中的规则)“一”=我解释中的“状态:)(或“到一”=“到这样的”)。为更清晰起见进行了编辑。状态对象模式是状态(已发生)处理转换。没有“重置状态”或“如果”条件来测试B出现时是否为初始状态。我想我在建议模式时会知道这一点;)我解释的行为是从“用户角度”出发的,以符合OP的期望。链接页面中显示了如何在内部处理它。还有重置状态-您只需设置初始状态;)