gpt4 book ai didi

java - 是否以及如何使用复合模式(GoF)

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:39 25 4
gpt4 key购买 nike

我应该用 Java 创建一个迷你命令解释器 (System.in),以支持使用适当的 GoF 模式对图形对象进行操作。解释器的语法是一种简单的 EBNF 语言,如下所示:`

<cmd>::=<create>|<remove>|<move>|<scale>|<list>|<group>|<ungroup>|<area>|<perimeter>
<create>::= new <typeconstr> <pos>
<remove>::= del <objID>
<move>::= mv <objID> <pos> | mvoff <objID> <pos>
<scale>::= scale <objID> <posfloat>
<list>::= ls <objID>| ls <type> | ls all | ls groups
<group>::= grp <listID>
<ungroup>::= ungrp <objID>
<area>::= area <objID>| area <type> | area all
<perimeter>::= perimeter <objID>| perimeter <type> | perimeter all
<pos>::=( <posfloat> , <posfloat> )
<typeconstr>::= circle (<posfloat>) | rectangle <pos> | img (<path>)
<type>::= circle | rectangle | img
<listID>::= <objID> { , <objID> }

命令的行为由命令模式管理,这是可以的。

我想以最简单的方式使用复合模式来构建通用命令的结构,但我发现这是一项艰巨的任务。有什么建议吗?

只有解释器模式才是执行此操作的不错选择吗?还是两者的结合?

一旦我有了复合结构,我就想使用构建器(可能是递归构建器)来创建命令。

谢谢。

最佳答案

复合是表示树结构的一个很好的模式,但我认为这不太适合您在这里所做的事情。您的命令没有深度嵌套,并且没有递归嵌套,因此您可能不会从这种结构中获得太多好处。

您的命令是结构化的,以便第一个标记确定操作,并且有特定于命令的规则来解析字符串的其余部分。命令模式看起来很理想,我建议使用工厂模式来封装具体的实现:

public class MyCommand{
public static MyCommand getInstance(String str){
String commandType = // get first token
String args = // remainder of string

switch (commandType){
case "new":
return buildCreateCommand(args);
// ... other cases
}
}

private MyCreateCommand buildCreateCommand(String args){
// Construct create command from args
}
}

class MyCreateCommand extends MyCommand{
// Create command things
}

关于java - 是否以及如何使用复合模式(GoF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343798/

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