Реализация шаблона проектирования состояния с использованием C ++ / CLI или C # - PullRequest
0 голосов
/ 24 января 2011

Я пытаюсь реализовать шаблон проектирования состояния с использованием C ++ / CLI. Этот шаблон требует, чтобы класс State был другом Context. Но C ++ / CLI не допускает класс друга. Я понимаю, что это также относится и к C #. Кто-нибудь реализовал шаблон состояния с C ++ / CLI или C #? Я хотел бы знать, как вы справились с отсутствием класса друзей.

Ответы [ 3 ]

0 голосов
/ 24 января 2011

Это делается с помощью ассоциации (или то, что все крутые дети называют Dependency Injection).Введите состояние в контекст.Смотрите реализацию на DoFactory

0 голосов
/ 24 января 2011

Вы можете сохранить состояние в подклассе, а затем заменить объект подкласса другим типом наследования при изменении состояния.

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() { }
  }
}  
0 голосов
/ 24 января 2011

Наличие класса State в качестве друга класса Context не является требованием для реализации шаблона State. В Википедии есть реализация без использования модификатора друга.

...