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

发布于 2024-10-14 03:45:15 字数 134 浏览 1 评论 0原文

我正在尝试使用 C++/CLI 实现状态设计模式。此模式要求 State 类是 Context 的友元。但 C++/CLI 不允许友元类。据我了解,C#也是如此。有人用 C++/CLI 或 C# 实现过状态模式吗?我想知道你是如何克服没有朋友课的情况的。

I am trying to implement the state design pattern using C++/CLI. This pattern requires that the State class be a friend of the Context. But C++/CLI does not allow a friend class. I understand that this is also the case with C#. Has anyone implemented the state pattern with C++/CLI or C#? I would like to know how you got around the absence of friend class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鹿! 2024-10-21 03:45:15

它是使用关联(或者所有酷孩子所说的依赖注入)完成的。将状态注入到上下文中。请参阅 DoFactory 上的实现

Its done using Association (or what all the cool kids are calling Dependency Injection). Inject the state into the context. See the implementation on DoFactory

满地尘埃落定 2024-10-21 03:45:15

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

Having the State class be a friend of the Context class is not a requirement for implementing the State pattern. Wikipedia has an implementation without using the friend modifier.

塔塔猫 2024-10-21 03:45:15

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

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

You could keep state in a subclass, then replace sub class object with a different inheriting type when state changes.

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() { }
  }
}  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文