.NET 장식 모드 설명
데코레이션 모드 정의:
데코레이션 모드는 원본 클래스 파일을 변경하지 않고 상속을 사용하지 않고 객체를 동적으로 확장하는 기능입니다. 감싸는 오브제, 즉 장식물을 생성하여 실물을 감싸는 것입니다.
데코레이터 패턴 구조도:
데코레이터 패턴 역할:
(1) 추상 컴포넌트(Component) 역할: 주어 추상 인터페이스 추가 책임을 받을 준비가 된 개체를 지정합니다.
(2) 구체적인 구성 요소 역할: 추가 책임을 맡을 클래스를 정의합니다.
(3) 데코레이터 역할: 컴포넌트 객체의 인스턴스를 보유하고 추상 컴포넌트 인터페이스와 일치하는 인터페이스를 구현합니다.
(4) 콘크리트 데코레이터 역할: 구성 요소 개체에 추가 책임을 추가하는 역할을 담당합니다.
구현:
실생활의 예를 인용하면서 새 휴대폰을 구입하고 휴대폰에 필름, 펜던트 등 새로운 장식을 천천히 추가했습니다.... .
1. 먼저 휴대폰 클래스를 데코레이터 패턴의 추상 구성 요소로 추상화합니다.
/// <summary> /// 手机抽象类,即抽象者模式中的抽象组件类 /// </summary> public abstract class Phone { /// <summary> /// 打印方法 /// </summary> public abstract void Print(); }
2. 이제 Apple 휴대폰을 구입했다면, 이제 추상 클래스를 상속하고 특정 구성 요소 클래스를 구현합니다.
/// <summary> /// 苹果手机,即装饰着模式中的具体组件类 /// </summary> public class ApplePhone:Phone { /// <summary> /// 重写基类的方法 /// </summary> public override void Print() { Console.WriteLine("我有一部苹果手机"); } }
3. 이제 장식을 위해 이 전화기에 새 구성 요소를 추가하고 싶습니다. , 먼저 장식 클래스를 추상화합니다.
/// <summary> /// 装饰抽象类,让装饰完全取代抽象组件,所以必须继承Phone /// </summary> public abstract class Decorator:Phone { private Phone p ; //该装饰对象装饰到的Phone组件实体对象 public Decorator(Phone p) { this.p = p; } public override void Print() { if (this.p != null) { p.Print(); } } }
4. 특정 장식 객체는 장식 추상 클래스를 상속합니다. 다음은 특정 영화 장식과 펜던트 장식입니다. :
/// <summary> /// 贴膜,具体装饰者 /// </summary> public class Sticker:Decorator { public Sticker(Phone p) : base(p) { } public override void Print() { base.Print(); //添加行为 AddSticker(); } /// <summary> /// 新的行为方法 /// </summary> public void AddSticker() { Console.WriteLine("现在苹果手机有贴膜了"); } }
/// <summary> /// 手机挂件,即具体装饰者 /// </summary> public class Accessories:Decorator { public Accessories(Phone p) : base(p) { } public override void Print() { base.Print(); // 添加新的行为 AddAccessories(); } /// <summary> /// 新的行为方法 /// </summary> public void AddAccessories() { Console.WriteLine("现在苹果手机有漂亮的挂件了"); } }
5. 호출:
/// <summary> /// 设计模式-装饰者模式 /// </summary> class Program { static void Main(string[] args) { Phone ap = new ApplePhone(); //新买了个苹果手机 Decorator aps = new Sticker(ap); //准备贴膜组件 aps.Print(); Decorator apa = new Accessories(ap); //过了几天新增了挂件组件 apa.Print(); Sticker s = new Sticker(ap); //准备贴膜组件 Accessories a = new Accessories(s);//同时准备挂件 a.Print(); } }
(1) 추상 구성 요소 역할: 추상 인터페이스 제공 추가 책임을 받을 준비가 된 개체를 지정합니다. >전화 인터페이스는 다음과 같습니다
(2) 구체적인 구성 요소 역할: 추가 책임을 맡을 클래스를 정의합니다. ~ ApplePhone
(3) 데코레이터 역할: 컴포넌트(Component) 객체의 인스턴스를 보유하고 추상 컴포넌트 인터페이스와 일치하는 인터페이스를 구현합니다. >데코레이터를 말합니다
(4) 콘크리트 데코레이터 역할: 컴포넌트 객체에 추가적인 책임을 추가하는 역할을 담당합니다. >액세서리 및 스티커 참조
장점:
1. Decorator 패턴과 상속 관계의 목적은 객체의 기능을 확장하는 것이지만 Decorator는 상속보다 더 많은 유연성을 제공할 수 있습니다.
2. 다양한 특정 데코레이션 클래스와 이러한 데코레이션 클래스의 배열 및 조합을 사용하여 디자이너는 다양한 동작의 다양한 조합을 만들 수 있습니다.
단점:
1. 이 기능은 상속보다 유연하지만 복잡성도 더 높습니다.
2. 장식 모드를 과도하게 사용하면 프로그램이 매우 복잡해집니다.
3. 데코레이션 모드는 추상 컴포넌트(Component) 형태의 프로그래밍을 위한 모드입니다. 그러나 특정 구성 요소에 대해 프로그래밍하는 경우 애플리케이션 아키텍처와 데코레이터가 적절한지 다시 생각해야 합니다. 물론 구성 요소 인터페이스를 변경하고, 새로운 공용 동작을 추가하고, "반투명" 데코레이터 모드를 구현할 수도 있습니다. 실제 프로젝트에서 최선의 선택을 해보세요.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 C의 Null 포인터 단축의 도전에 대해 탐구합니다. 그것은 문제가 그 자체가 아니라 오용한다고 주장합니다. 이 기사는 사전 수준 점검, 포인터 이니셜을 포함한 수반을 방지하기위한 모범 사례에 대해 자세히 설명합니다.

이 기사에서는 printf 내에서 \ n 탈출 시퀀스를 사용하여 C에서 Newline 문자를 만드는 방법을 설명하고 함수를 넣습니다. 기능을 자세히 설명하고 출력에서 라인 브레이크 사용을 보여주는 코드 예제를 제공합니다.

이 기사는 초보자가 C 컴파일러를 선택하도록 안내합니다. GCC는 사용 편의성, 광범위한 가용성 및 광범위한 리소스로 인해 초보자에게 가장 적합하다고 주장합니다. 그러나 GCC, Clang, MSVC 및 TCC도 비교하여 차이를 강조합니다.

이 기사는 현대 C 프로그래밍에서 NULL의 지속적인 중요성을 강조합니다. 발전에도 불구하고 NULL은 명시적인 포인터 관리에 중요하며, 유효한 메모리 주소가 없음을 표시하여 세분화 결함을 방지합니다. 최고의 PRAC

이 기사에서는 초보자를위한 온라인 C 컴파일러를 검토하여 사용 편의성 및 디버깅 기능에 중점을 둡니다. OnlineGDB 및 Repl.it는 사용자 친화적 인 인터페이스 및 유용한 디버깅 도구를 위해 강조 표시됩니다. 프로그램 및 컴파일과 같은 다른 옵션

이 기사는 온라인 C 프로그래밍 플랫폼을 비교하여 디버깅 도구, IDE 기능, 표준 컴플라이언스 및 메모리/실행 제한과 같은 기능의 차이점을 강조합니다. "최고의"플랫폼은 사용자의 요구에 달려 있다고 주장합니다.

이 기사에서는 C IDE의 효율적인 코드 복사에 대해 설명합니다. 복사는 컴파일러 기능이 아닌 IDE 기능이며 IDE 선택 도구 사용, 코드 폴딩, 검색/교체, Templa를 포함하여 효율성 향상을위한 세부 사항 전략을 강조합니다.

이 기사는 C 프로그램 컴파일에서 누락 된 출력 창을 문제 해결합니다. 실행 가능, 프로그램 오류, 잘못된 컴파일러 설정, 백그라운드 프로세스 및 빠른 프로그램 종료와 같은 원인을 검사합니다. 솔루션은 ch
