3

我已经实现了一个简单的状态模式,它应该在我的模型类之上运行。我的应用程序是用 C# WPF 编写的。

首先,我不太确定需要将状态模式逻辑放在哪里。我应该把它放到我的控制器或服务类中吗?

假设您想在进行实际转换之前验证一些事情。目前我已经创建了一个可以直接从状态模式类调用的规范。

但这是正确的方法吗?

 interface ISpecification<T>
{
    bool IsSatisfiedBy(T sut);
}

class DetermineDockingSate:ISpecification<Vehicle>
{
    public bool IsSatisfiedBy(Vehicle sut)
    {
        throw new NotImplementedException();
    }
}

这是用于状态模式内的验证/检查点。但是在进行转换之前应该在状态模式内执行的操作呢?

我将在某种服务类中实现这些操作,并直接从我的状态模式中调用这些服务类。

 public override void Dock()
    {
        Console.WriteLine("Dock Machine and going to the Vehicle status.");

        DockingStateEngineService myService = new DockingStateEngineService();

        Func<string,bool> messageTarget;

        messageTarget = myService.DetermineDockingSate;

        bool ok = messageTarget("NOT");

        this.Engine.setCurrentState(Engine.Vehicle);
    }

这又是正确的方法吗?

4

1 回答 1

3

根据HeadFirst的说法,如果具体状态决定下一个状态将是什么,这是一个没有绝对答案的问题。
如果状态转换是固定的,那么上下文决定下一个状态是合适的。
如果转换更加动态,则通常将决策放在状态类中(例如,如果决策依赖于上下文类中变量的运行时值)。

显然,这会在状态类之间创建依赖关系。这可以通过将状态作为上下文类中的成员来最小化。

于 2013-05-07T06:20:15.563 回答