我正在尝试使用C ++ / CLI实现状态设计模式。此模式要求State类是Context的朋友。但是C ++ / CLI不允许朋友类。我知道C#也是如此。有没有人用C ++ / CLI或C#实现状态模式?我想知道你是如何避开朋友班的。
答案 0 :(得分:0)
让State类成为Context类的朋友不是用于实现State模式的要求。维基百科有implementation而不使用好友修饰符。
答案 1 :(得分:0)
使用Association(或者所有酷孩子都称之为依赖注入)完成它。将状态注入上下文中。请参阅DoFactory
上的实施答案 2 :(得分:0)
您可以将状态保留在子类中,然后在状态更改时使用不同的继承类型替换子类对象。
class YourClass
{
private MyEnum _myStateEnum; // Wrap this with a public property
private MyInnerClass _myStateLogic; // Change this with appropriate type when above changes
public void AnExampleMethod()
{
_myStateLogic.AnExampleMethod();
}
internal abstract class MyInnerClass
{
public virtual abstract void AnExampleMethod();
}
internal class MyOtherInnerClass1: MyInnerClass
{
public override void AnExampleMethod() { }
}
internal class MyOtherInnerClass2: MyInnerClass
{
public override void AnExampleMethod() { }
}
}