2011-01-24 2 views
0

C++/CLI를 사용하여 상태 디자인 패턴을 구현하려고합니다. 이 패턴을 사용하려면 State 클래스가 Context의 친구 여야합니다. 하지만 C++/CLI는 친구 클래스를 허용하지 않습니다. 나는 이것이 C#에서도 마찬가지라는 것을 알고있다. 누구든지 C++/CLI 또는 C#으로 상태 패턴을 구현 했습니까? 친구 수업이 없으면 어떻게 생각하는지 알고 싶습니다.C++/CLI 또는 C#을 사용하여 상태 디자인 패턴 구현

+0

C#에는 동일한 어셈블리의 코드에만 액세스 할 수있는 '내부'가시성이 있습니다. – CodesInChaos

답변

0

Association을 사용하여 완료되었습니다 (또는 모든 멋진 애들이 Dependency Injection이라고 부르는 것). 컨텍스트에 상태를 삽입하십시오. DoFactory

+0

답장을 보내 주셔서 감사합니다. DoFactory에서 제안한 것과 비슷한 버전을 구현했습니다. – DPD

+0

상태 개체에 컨텍스트에 대한 개인 액세스 권한이 없으므로 friend 클래스를 사용하는 것과 동일한 유연성을 제공하지 않습니다. –

0

State 클래스를 Context 클래스의 친구로 지정하면 State 패턴을 구현하는 데 요구 사항이 적용되지 않습니다. 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() { } 
    } 
}