【发布时间】:2019-01-14 19:52:38
【问题描述】:
初始代码:
public void updateState(final int state)
{
preSet();
itsState = state;
postSet();
}
public void setTitle(final String title)
{
preSet();
itsTitle = title;
postSet();
}
在我的命令模式实现之后:
public void updateState(final int state)
{
CallableManager.doInTransaction(new Callable<Void>()
{
@Override
public Void execute()
{
itsHiddenNodes = hiddenNodes;
return null;
}
});
}
public void setTitle(final String title)
{
CallableManager.doInTransaction(new Callable<Void>()
{
@Override
public Void execute()
{
itsTitle = title;
return null;
}
});
}
这个接口是为传递方法作为参数创建的。
private interface Callable<T>
{
public T execute();
}
创建这个类是为了管理命令模式。
private class CallableManager
{
public <T> static void doInTransaction(final Callable<T> callable)
{
preSet();
callable.execute();
postSet();
}
}
如您所见,实现命令模式看起来并不是很有效,至少对于本示例的代码行而言。对于这个例子,我实现了命令模式来逃避重复代码并减少代码行。但因此,本示例未提供这两种方法。请给我一些建议。如何有效地使用命令模式?
【问题讨论】:
-
模式不是为了减少代码行数。你为什么要在这里使用这种模式?
-
我知道,但我希望至少减少代码的重复。
-
我建议您查看this primer。我想它可能会回答你的问题。
-
@Sha 这正在发生。现在
doInTransaction的逻辑在一个地方,如果你需要改变它,你必须在一个地方改变它。 -
拥有一个模式却不知道您想用它实现什么,因此很难提出正确的实现。
updateState和setTitle背后的想法是什么?
标签: java design-patterns command-pattern