使用C ++ / CLI或C#实现状态设计模式

时间:2011-01-24 14:24:03

标签: c# .net design-patterns c++-cli

我正在尝试使用C ++ / CLI实现状态设计模式。此模式要求State类是Context的朋友。但是C ++ / CLI不允许朋友类。我知道C#也是如此。有没有人用C ++ / CLI或C#实现状态模式?我想知道你是如何避开朋友班的。

3 个答案:

答案 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() { }
  }
}