2012-12-18 1 views
2

전날 꾸미기를 구현하고 있었고 그날 밤 나중에 예제와 같은 것이 데코레이터 패턴의 올바른 표현인지 궁금해하기 시작했습니다.데코레이터 패턴에서 컬렉션 멤버를 조작해도 괜찮습니까?

보통
public abstract class Foo 
{ 
    public List<string> Names { get; set; } 

    public abstract string GetNames(); 
} 

public abstract class BarDecorator : Foo 
{ 
    public abstract String GetNames(); 
} 

public class JustAnOldBar : Foo 
{ 
    public JustAnOldBar() { 
     this.Names.Add("An Old Bar"); 
    } 

    public override string GetNames() 
    { 
     return string.Join(",", this.Names.ToArray()); 
    } 
} 

public class SomeDecorator : BarDecorator { 
    private Foo foo; 

    public SomeDecorator(Foo someFoo) { 
     this.foo = someFoo; 
    } 

    public override string GetNames() 
    { 
     return string.Join(",", this.Names) + "," + string.Join(",", this.foo.Names); 
    } 
} 

나는이 패턴을 구현할 때, 나는 비용이나 설명처럼 걸쳐 당기있어 단일 구성원 찾고 있어요,하지만 그것은 장식 또는 경우 콜렉션에서 작동하도록 적절한 있는지 궁금해 이 점에 관해서는 건축업자를보아야합니다.

+1

그냥 장식입니다. 아무 잘못 없음. –

답변

1

데코레이터 패턴에서 데코 레이팅은 장식과 관련된 필드 (있는 경우)의 의존성이 없습니다. 동작을 데코 레이팅 클래스로 수정하면 약 입니다. wiki definition에서 예증 된 것처럼 필드의 조작이나 메서드의 반환 값을 사용하는 대신 윈도우의 그리기 동작을 꾸미기도합니다.

요약하면 Wiktor Zychla가 언급했듯이 - 아무런 문제가 없습니다.