C#中的“朋友”类和状态模式

问题描述

我试图在 C# 中实现状态模式,我做了这样的事情:

class Context {
    private State state = null;
    private State concreteState1 = null;
    private State concreteState2 = null;

    public Context(State state) {
        concreteState1 = new ConcreteState1(this);
        ChangeStateto(concreteState1);
    }

    public void ChangeStateto(State state_) {
        state = state_;
    }

    public void DoSomething() {
        state.DoSomething();
    }

    public void DoSomethingElse() {
        state.DoSomethingElse();
    }
}
    
abstract class State {
    protected Context context;

    public void Context(Context context_) {
        context = context_;
    }

    public abstract void DoSomething();

    public abstract void DoSomethingElse();
}

这里,ConcreteState1ConcreteState2State 的实现,为了简洁我省略了它们。我遇到的问题是 Context 有一些成员,我希望所有实现 State 的类都可以访问这些成员;我认为这在模式的上下文中是有道理的,因为这个想法是让上下文根据其状态“好像”它是一个不同的类,为此,状态能够访问它的内部结构。

在 C++ 中,我可能会通过将 State 设置为 friendContext 类来对此进行编码,但是由于 C# 没有类似于 friend 的任何东西,我'我不知道在这里做什么。我真的不想为这个特定的有限状态机创建一个程序集并将所有代码放在那里。我也不想要 Context 的私有成员的公共设置器,因为我不希望其他类修改上下文。有没有其他好的替代方法可以让我保持我的 ContextConcreteState 类不同,但使 Context 的内部结构仅对 State 可用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)