2011-01-24 5 views
0

C++/CLIを使用して状態設計パターンを実装しようとしています。このパターンでは、Stateクラスがコンテキストのフレンドである必要があります。しかし、C++/CLIはフレンドクラスを許可していません。私はこれもC#の場合であることを理解しています。誰もC++/CLIやC#で状態パターンを実装していますか?私はあなたが友人のクラスの不在の周りにいかにあったか知りたいと思います。C++/CLIまたはC#を使用した状態設計パターンの実装

+0

C#には、同じアセンブリからのコードに対してのみアクセス可能な「内部」可視性があります。 – CodesInChaos

答えて

0

アソシエーションを使用して実行されます(または、すべてのクールな子供がDependency Injectionと呼んでいます)。コンテキストを状態に注入します。 DoFactory

+0

あなたの返事をお寄せいただきありがとうございます。私はDoFactoryで提案されたものと同様のバージョンを実装しました。 – DPD

+0

状態オブジェクトにコンテキストへのプライベートアクセスがないため、フレンドクラスを使用するのと同じ柔軟性は得られません –

0

StateクラスをContextクラスのフレンドにすることは、ステートパターンを実装するためにの要件ではありません。 Wikipediaにはフレンド修飾子を使用せずにimplementationがあります。

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() { } 
    } 
} 
関連する問題