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
基于事件类型应用一组操作的Java设计模式_Java_Design Patterns - Fatal编程技术网

基于事件类型应用一组操作的Java设计模式

基于事件类型应用一组操作的Java设计模式,java,design-patterns,Java,Design Patterns,我有一个问题陈述,其中有一组特定的操作(A1、A2、A3、…、An)。根据事件类型(E1、E2、E3…、Em),可以应用不同的操作集 例如: 事件E1->A1、A3、A5 事件E2->A2、A5、A7 此外,还可以将更多操作添加到操作集中。因此,我的代码应该是开放的扩展 我曾想过应用decorator模式,但在decorator模式中,我们似乎可以附加额外的职责(操作)并返回相同的对象。 在我的例子中,可能不是所有操作都返回相同的对象,并且可能正在执行/触发不同的进程 Java中是否有处理此场景

我有一个问题陈述,其中有一组特定的操作(A1、A2、A3、…、An)。根据事件类型(E1、E2、E3…、Em),可以应用不同的操作集

例如:

事件E1->A1、A3、A5

事件E2->A2、A5、A7

此外,还可以将更多操作添加到操作集中。因此,我的代码应该是开放的扩展

我曾想过应用decorator模式,但在decorator模式中,我们似乎可以附加额外的职责(操作)并返回相同的对象。 在我的例子中,可能不是所有操作都返回相同的对象,并且可能正在执行/触发不同的进程


Java中是否有处理此场景的设计模式?

我认为您可以使用
Map
来处理此场景。使用以下方法:

void addAction(Event event, Action action) {
    map.computeIfAbsent(event, event -> new HashSet<>()).add(action);
}

void removeAction(Event event, Action action) {
    map.computeIfAbsent(event, event -> new HashSet<>()).remove(action);
}
void addAction(事件,动作){
computeIfAbsent(event,event->newhashset()).add(action);
}
无效删除操作(事件、操作){
computeIfAbsent(event,event->newhashset()).remove(action);
}
您可以完全控制事件及其绑定的操作集


另外,您应该在事件和操作中重写
equals()
hashCode()
方法,以便正确使用Map和Set。如果希望操作以相同的顺序运行,只需将HashSet替换为LinkedHashSet。

1。没有Java模式这样的东西,很可能是指软件设计模式。;2.我想应用装饰图案-应用于什么?你想解决的具体问题是什么?到目前为止你做了什么?;3.自己尝试一下,并提出一个具体的问题;否则,我认为它有点宽泛,很可能导致基于意见的答案。。