0

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

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 是相当复杂的方法(不是很长,只是值得分开),所以我想将它们分解为具有公共接口的类,即策略模式。问题是,我无法封装_internals在这些类中。我的意思是,我可以将它传递给Execute那些类的方法,但这似乎是一个糟糕的方法。内部结构比单个操作更持久,因此策略类不能“拥有”内部结构本身。在这台机器上可以进行多种不同的操作,传入不同的Thingy。

您可以建议其他路线吗?

编辑

这是一种状态机,但并不是说一个操作仅在特定状态下有效。_internals是一堆状态,而不仅仅是当前状态。这三个操作中的任何一个都可以随时进行。

4

1 回答 1

0

你的战略“战略”似乎是合理的。到目前为止,代码看起来不错,您需要实际声明一个接口,但我认为您明白了。

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

你可以把它包装一下,我定义的接口就像

执行

发送有限的内部子集

返回修改的内部子集

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

于 2013-08-24T23:58:12.880 回答