큰소리 디자인의 장식 모델
설계 원칙:
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 인터페이스를 바꾸고 새로운 공개 행위를 늘려'반투명'장식자 모델을 실현할 수도 있다.실제 프로젝트에서 최선의 선택을 해야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.