큰소리 디자인의 장식 모델

2761 단어
장식 모드: 한 대상에게 동태적으로 추가 직책을 추가하면 기능을 증가시키는 데 있어 장식 모드는 하위 클래스를 생성하는 것보다 더욱 유연하다.
설계 원칙:
1. 조합을 많이 사용하고 계승을 적게 한다.
계승 디자인의 하위 클래스를 이용하는 행위는 번역할 때 정태적으로 결정되고 모든 하위 클래스가 같은 행위를 계승한다.그러나 조합된 방법을 이용하여 대상을 확장할 수 있다면 실행할 때 동적으로 확장할 수 있다.
2. 클래스는 확장에 대한 개방을 설계하고 수정에 대한 닫기를 해야 한다.
장식 모델은 대상을 포장하는 것이다. 이렇게 하면 모든 장식 대상의 실현은 이 대상을 어떻게 사용하는지와 분리될 수 있다. 모든 장식 대상은 자신의 기능에만 관심을 가지고 목걸이에 어떻게 추가되는지에 관심이 없다!
'반찬'착용의 실례에 대해 장식 모드를 통해 반찬에 다양한 복식 종류를 추가할 수 있고 다양한 배열 조합을 할 수 있다는 것이 장식 모드의 정수일지도 모른다.
다음은 코드의 일부일 뿐입니다.
static void Main(string[] args)
        {
            Person xc = new Person(" ");


            Console.WriteLine("
:"); TShirts dtx = new TShirts(); BigTrouser kk = new BigTrouser(); dtx.Decorate(xc); kk.Decorate(dtx); kk.Show(); Console.Read(); } } class Person { public Person() { } private string name; public Person(string name) { this.name = name; } public virtual void Show() { Console.WriteLine(" {0}", name); } } class Finery : Person { protected Person component; // public void Decorate(Person component) { this.component = component; } public override void Show() { if (component != null) { component.Show(); } } } class TShirts : Finery { public override void Show() { Console.Write(" T "); base.Show(); } } class BigTrouser : Finery { public override void Show() { Console.Write(" "); base.Show(); }

특징:
(1) 장식 대상과 실제 대상은 같은 인터페이스를 가진다.이렇게 하면 클라이언트 대상은 실제 대상과 같은 방식으로 장식 대상과 상호작용할 수 있다.
(2) 장식 대상은 실제 대상의 인용(reference)을 포함한다.
(3) 장식 대상은 클라이언트로부터 모든 요청을 받아들인다.그것은 이 요청들을 실제 대상에게 전달한다.
(4) 장식 대상은 이러한 요청을 전달하기 전이나 이후에 추가 기능을 추가할 수 있다.이렇게 하면 운행 시 주어진 대상의 구조를 수정하지 않아도 외부에 추가 기능을 추가할 수 있다.대상을 대상으로 하는 디자인에서 일반적으로 계승을 통해 주어진 클래스에 대한 기능 확장을 실현한다.
이점:
  1. Decorator 모드와 계승 관계의 목적은 모두 대상의 기능을 확장하는 것이지만 Decorator는 계승보다 더 많은 유연성을 제공할 수 있다.
  2. 서로 다른 구체적인 장식류와 이런 장식류의 배열 조합을 사용함으로써 디자이너는 다양한 행위의 조합을 창조할 수 있다.
단점:
   1. 계승보다 더욱 유연하고 기동적인 이런 특성은 더욱 많은 복잡성을 의미한다.
   2. 장식 패턴은 디자인에 많은 소류를 만들어 낼 수 있기 때문에 과도하게 사용하면 프로그램을 매우 복잡하게 만들 수 있다.
   3. 장식 모드는 추상 구성 요소 (Component) 유형에 대한 프로그래밍입니다.그러나 구체적인 구성 요소를 프로그래밍하려면 응용 구조와 장식자가 적합한지 다시 생각해야 한다.물론 Component 인터페이스를 바꾸고 새로운 공개 행위를 늘려'반투명'장식자 모델을 실현할 수도 있다.실제 프로젝트에서 최선의 선택을 해야 한다.

좋은 웹페이지 즐겨찾기