【问题标题】:Implementing state design pattern using C++/CLI or C#使用 C++/CLI 或 C# 实现状态设计模式
【发布时间】:2011-01-24 22:51:43
【问题描述】:

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

【问题讨论】:

  • C# 具有 internal 可见性,使得某些内容只能被来自同一程序集的代码访问。

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


【解决方案1】:

它使用关联(或所有酷孩子所说的依赖注入)完成。将状态注入上下文。查看DoFactory上的实现

【讨论】:

  • 感谢大家的回复,我实现了一个类似于DoFactory中建议的版本。
  • 它仍然没有提供与使用朋友类相同的灵活性,因为状态对象没有对上下文的私有访问权
【解决方案2】:

让 State 类成为 Context 类的朋友并不是实现 State 模式的要求。维基百科有一个implementation,但没有使用朋友修饰符。

【讨论】:

    【解决方案3】:

    您可以将状态保留在子类中,然后在状态更改时将子类对象替换为不同的继承类型。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 2019-05-28
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      相关资源
      最近更新 更多