问题描述
我试图在 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();
}
这里,ConcreteState1
和 ConcreteState2
是 State
的实现,为了简洁我省略了它们。我遇到的问题是 Context
有一些成员,我希望所有实现 State
的类都可以访问这些成员;我认为这在模式的上下文中是有道理的,因为这个想法是让上下文根据其状态“好像”它是一个不同的类,为此,状态能够访问它的内部结构。
在 C++ 中,我可能会通过将 State
设置为 friend
的 Context
类来对此进行编码,但是由于 C# 没有类似于 friend
的任何东西,我'我不知道在这里做什么。我真的不想为这个特定的有限状态机创建一个程序集并将所有代码放在那里。我也不想要 Context 的私有成员的公共设置器,因为我不希望其他类修改上下文。有没有其他好的替代方法可以让我保持我的 Context
和 ConcreteState
类不同,但使 Context
的内部结构仅对 State
可用?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)