0

我有一门可以从状态模式中受益的课程。然而,常见的“用状态/策略替换类型代码”重构似乎不太适合我的情况:状态是通过观察其他对象来计算的,没有类型代码变量。

我的大部分类代码只是在调用它时“计算”一些状态,并运行该状态的函数。

强制类型代码变量感觉不对,因为:

  1. 我将被迫在每个使用多态函数的地方调用“updateState()”函数。

  2. 我的班级将不再是 100% 的行为,我宁愿这样做,而不是某种内部状态。

由于每次调用其函数时都必须计算状态,我想知道我是否在考虑错误的模式。

通常我会重构这个:

if (this.someOtherThingIsRunning()) {
    ...
} else {
    ...
}

像这样:

typecode.doSomething()
// that being polymorphic

这样做似乎很奇怪:

updateTypeCode()
typecode.doSomething()

状态模式是否适用于这种情况?是否有任何替代策略可以从没有类型代码的多态性中提取?

4

2 回答 2

0

在写我的问题时,我意识到也许我可以让类型代码成为一个函数并返回一个时间(函数范围)类型代码。喜欢:

typecode().doSomething()

这个解决方案永远不会存储状态,这是我想要避免的。但是我仍然想知道我的问题是否开始是因为我使用了错误的模式。

于 2013-01-03T07:17:52.593 回答
0

如果您愿意存储状态,则可以考虑结合 State 和 Observer 以在依赖类更改时修改状态(而不是检查每个调用)。不过,只有某些型号可以使用。

否则你还不如说object.doSomething()把支票放在里面doSomething()。在这种情况下,使用设计模式不会带来任何显着的优势(尽管如果您稍微放宽对设计模式的定义,很多事情都会被认为是这样的)。我可能会选择:

doSomething()
{
  if (someOtherThingIsRunning())
    doOneThing();
  else
    doAnotherThing();
}

另一种方法(您已经建议)是进行上述检查typecode()并返回另一个包含方法的类doSomething()

于 2013-01-03T08:02:05.833 回答