修改调用者内部的策略模式?

时间:2013-08-24 23:44:37

标签: c# design-patterns strategy-pattern

也许策略模式不是我追求的。假设我的代码看起来像这样(伪版本):

class Machine
{
    private Stack<State> _internals;

    public void DoOperation(Thingy x)
    {
        switch (x.operation)
        {
            case Op.Foo:
                DoFoo();
                break;

            case Op.Bar:
                DoBar();
                break;

            case Op.Baz:
                DoBaz();
        }
    }

    private void DoFoo()
    {
        // pushing and popping things from _internals, doing things to those States
    }

    private void DoBar()
    {
        // similarly large method to foo, but doing something much different to _internals
    }

    private void DoBaz()
    {
        // you get the idea...
    }
}

Foo,Bar和Baz是相当复杂的方法(不是很长,只是值得分离)所以我想把它们分成具有通用接口,la策略模式的类。问题是,我无法在这些类中封装_internals。我的意思是,我可以将它传递给那些类的Execute方法,但这似乎是一个糟糕的方法。内部持续时间比单个操作持续时间更长,因此策略类不能“拥有”内部本身。可以在这台机器上完成多个不同的操作,并传入不同的Thingy。

您可以建议不同的路线吗?

修改

这是一种状态机,但不是某种操作仅在特定状态下有效。 _internals是一堆状态而不仅仅是当前状态。这三项操作中的任何一项都可以随时完成。

1 个答案:

答案 0 :(得分:0)

您的策略“策略”似乎合理。到目前为止,代码看起来很好,你需要实际声明一个接口,但我认为你有这个。

我不明白为什么你不能通过_internals。这将是接口定义的一部分。成员能够接受一种“:_internals_data”或其他类型。

你可以把它包起来,我将接口定义为

执行

sendinlimitedsubsetofinternals

Returnsmodifiedsubsetofinternals

然后,这两个数据方法可能只是一个字符串数组或某些东西,以真正收紧交互。然后你可以在稍后的某个时间使用序列化或其他东西。

相关问题