我正在为民用机器应用编写结构建模工具.我有一个代表整个建筑的巨大模型类,其中包括节点,线元素,载荷等的集合,它们也是自定义类.
我已经编写了一个撤消引擎,它在每次修改模型后都会保存一份深层拷贝.现在我开始考虑是否可以进行不同的编码.我可以使用相应的反向修改器保存每个修改器动作的列表,而不是保存深层副本.这样我就可以将反向修改器应用于要撤消的当前模型,或者将修改器应用于重做.
我可以想象你将如何执行更改对象属性等的简单命令.但复杂命令如何?就像将新节点对象插入模型并添加一些保持对新节点的引用的线对象一样.
如何实现这一目标?
我必须使用数百行以下代码实现某些业务规则
if this
then this
else if
then this
.
. // hundreds of lines of rules
else
that
Run Code Online (Sandbox Code Playgroud)
我们是否有任何设计模式可以有效地实现这一点或重用代码,以便它可以应用于所有不同的规则.我听说过规范模式,它创建了类似下面的内容
public interface Specification {
boolean isSatisfiedBy(Object o);
Specification and(Specification specification);
Specification or(Specification specification);
Specification not(Specification specification);
}
public abstract class AbstractSpecification implements Specification {
public abstract boolean isSatisfiedBy(Object o);
public Specification and(final Specification specification) {
return new AndSpecification(this, specification);
}
public Specification or(final Specification specification) {
return new OrSpecification(this, specification);
}
public Specification not(final Specification specification) {
return new NotSpecification(specification); …Run Code Online (Sandbox Code Playgroud)