C\#디자인 모드 프로 그래 밍 의 장식 자 모드 분석
예 를 들다
왕 봉 이 우승 팀 만 들 기.
먼저 팀 류 는 비어 있 고 왕 봉 의 끊 임 없 는 노력 을 통 해 팀 을 위해 학생 을 얻 고 팀 원 들 에 게 적당 한 플랫폼 을 만들어 발휘 하도록 한다.
팀 이 계속 강해 지고 완전 해 지 는 것 은 장식 자 에 의 해 서로 다른 수요 에 따라 기 류 를 개선 하고 일치 하 게 마지막 에 당신 의 찬성 을 얻어 당신 의 수 요 를 만족 시 키 는 것 입 니 다.
조립 기 모드 를 실현 하 는 도표:
전대 구성 코드
//
abstract class WangFengTeam
{
//
abstract public void Acrion();
}
//
class Student : WangFengTeam
{
// Methods
override public void Acrion()
{
Console.WriteLine(" :");
}
}
//
abstract class Direct : WangFengTeam
{
//
protected WangFengTeam team;
//
public void SetComponent(WangFengTeam team)
{
this.team = team;
}
//
override public void Acrion()
{
if (team != null)
{
team.Acrion();
}
}
}
// , 。
class BoyTeam : Direct
{
//
public string teamName= " Jquery";
//
override public void Acrion()
{
base.Acrion();
Console.WriteLine(" , 。");
}
}
// ,
class GrilTeam : Direct
{
//
override public void Acrion()
{
base.Acrion();
Console.WriteLine(" , 。");
//
show();
}
public void show()
{
Console.WriteLine(" , ");
}
}
클 라 이언 트 코드:
public static void Main()
{
Student team = new Student();
BoyTeam boy = new BoyTeam();
GrilTeam girl = new GrilTeam();
//
boy.SetComponent(team);
//
girl.SetComponent(boy);
girl.Acrion();
Console.Read();
}
장식 자 패턴 의 장단 점장식 자 모델 에 대한 상세 한 소 개 를 본 후에 우 리 는 그것 의 장단 점 을 계속 분석 했다.
장점:
4.567917.이 모델 을 장식 하고 계승 하 는 목적 은 모두 대상 을 확장 하 는 기능 이지 만 장식 자 모델 은 계승 보다 더욱 유연 하 다4.567917.서로 다른 구체 적 인 장식 류 와 이런 유형의 배열 조합 을 사용 하면 디자이너 는 다양한 행위 의 조합 을 창조 할 수 있다
장식 자 모델 은 디자인 에 작은 대상 이 많이 나타 나 고 과도 하 게 사용 하면 프로그램 을 더욱 복잡 하 게 만 들 수 있다.그리고 더 많은 대상 은 실수 가 어려워 질 것 이다.특히 이들 대상 은 모두 비슷 해 보인다.
필드 사용
다음은 장식 자 모델 이 구체 적 으로 어떤 상황 에서 사용 되 는 지 살 펴 보고 다음 과 같은 상황 에서 장식 자 모델 을 사용 해 야 한다.
하나의 기능 을 확장 하거나 하나의 클래스 에 추가 책임 을 져 야 합 니 다.
한 대상 에 게 동적 으로 기능 을 추가 해 야 하 며,이러한 기능 들 은 다시 동적 으로 취소 할 수 있다.
일부 기본 기능 의 배열 조합 으로 인해 발생 하 는 매우 많은 기능 을 증가 시 켜 야 한다.
.NET 에서 장식 자 모델 의 실현
.NET 라 이브 러 리 에서 도 장식 자 모델 의 실현 이 있 습 니 다.이 종 류 는 바로 System.IO.stream 입 니 다.다음은 Stream 류 구 조 를 보 겠 습 니 다.
BufferedStream,CryptoStream 과 GZipStream 은 사실은 두 가지 구체 적 인 장식 유형 으로 이곳 의 장식 자 모델 은 추상 적 인 장식 캐릭터(Decorator)를 생략 했다.다음은 클 라 이언 트 가 Memory Stream 에 어떻게 동적 으로 기능 을 추가 하 는 지 보 여 줍 니 다.
MemoryStream memoryStream = new MemoryStream(new byte[] {95,96,97,98,99});
//
BufferedStream buffStream = new BufferedStream(memoryStream);
//
CryptoStream cryptoStream = new CryptoStream(memoryStream,new AesManaged().CreateEncryptor(),CryptoStreamMode.Write);
//
GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true);
총결산여기까지 장식 자 모델 에 대한 소 개 는 끝났다.장식 자 모델 은 상속 이 아 닌 대상 조합 으로 재운 행 시 대상 기능 을 동적 으로 확장 하 는 능력 을 실 현 했 고 필요 에 따라 여러 가지 기능 을 확장 할 수 있어 계승 이 가 져 온'유연성 차이'와'다 자 류 파생 문 제 를 단독으로 사용 하지 않도록 했다.또한 대상 을 대상 으로 하 는 디자인 원칙 에서'상속'과'개방-폐쇄'가 아 닌 대상 조합 을 우선 사용 하 는 것 이 원칙 에 잘 부합된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.