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

本文关键字:策略 模式 内部 修改 调用者 用于 | 更新日期: 2023-09-27 18:28:59

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

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

你能建议其他路线吗?

编辑

这是一种状态机,但不是说一个操作只在特定状态下有效。CCD_ 3是状态的堆栈,而不仅仅是当前状态。这三种操作中的任何一种都可以在任何时间完成。

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

您的策略"strategy"看起来不错。到目前为止,代码看起来不错,您需要实际声明一个接口,但我认为您已经做到了。

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

你可以稍微总结一下,我定义的接口就像

执行

发送有限的用户到内部

返回修改后的内部子系统

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