(34) C \ # 디자인 모델 - 장식 자 모델 (장식 자 패턴)
4415 단어 C \ # 디자인 모드
소프트웨어 개발 에서 우 리 는 핸드폰 에 스티커, 액세서리, 케이스 등 다양한 기능 을 추가 하려 고 한다.이때 계승 을 통 해 이 루어 진다 면 우 리 는 수많은 종 류 를 정의 해 야 한다. 그러면 '하위 폭발' 의 문 제 를 초래 할 수 있다.이 문 제 를 해결 하기 위해 장식 자 모드 를 사용 하여 대상 에 게 동적 으로 추가 적 인 직책 을 추가 할 수 있다.
장식 자 모드 에 대한 상세 한 소개
정의.
장식 자 모델 은 고객 에 게 투명 한 방식 으로 동태 적 으로 한 대상 에 게 더 많은 직책 을 부가 하고 장식 자 모델 은 서브 클래스 를 생 성 하 는 것 보다 더욱 유연 하 게 기능 을 증가 할 수 있다.
구체 적 실현
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _23DecoratorPatternDemo
{
///
/// ,
///
public abstract class Phone
{
public abstract void Print();
}
///
/// ,
///
public class ApplePhone : Phone
{
public override void Print()
{
Console.WriteLine(" ———— ");
}
}
///
/// , , Phone
///
public abstract class Decorator :Phone
{
private Phone phone;
public Decorator(Phone p)
{
this.phone = p;
}
public override void Print()
{
if(phone!=null)
{
phone.Print();
}
}
}
///
/// ,
///
public class Sticker:Decorator
{
public Sticker(Phone p):base(p)
{
}
public override void Print()
{
base.Print();
//
AddSticker();
}
///
///
///
public void AddSticker()
{
Console.WriteLine(" ");
}
}
///
///
///
public class Accessories : Decorator
{
public Accessories(Phone p) : base(p)
{
}
public override void Print()
{
base.Print();
AddAccessories();
}
public void AddAccessories()
{
Console.WriteLine(" ");
}
}
class Program
{
static void Main(string[] args)
{
//
Phone phone = new ApplePhone();
//
Decorator applePhoneWithSticker = new Sticker(phone);
//
applePhoneWithSticker.Print();
Console.WriteLine("----------------------
");
//
Decorator applePhoneWithAccessories = new Accessories(phone);
//
applePhoneWithAccessories.Print();
Console.WriteLine("----------------------
");
//
Sticker sticker = new Sticker(phone);
Accessories applePhoneWithAccessoriesAndSticker = new Accessories(sticker);
applePhoneWithAccessoriesAndSticker.Print();
Console.WriteLine();
}
}
}
위의 Program 류 코드 를 통 해 알 수 있 듯 이 클 라 이언 트 는 휴대 전화 부품 을 휴대 전화 에 동적 으로 추가 할 수 있 으 며, 다른 부품 을 추가 하려 면 Decorator 류 의 대응 류 를 계승 하 는 것 만 추가 하면 된다.장식 자 패턴 의 확장 성 이 매우 좋다 는 것 을 알 수 있다.
장식 자 모드 의 캐릭터
추상 적 인 구성 요소 역할 (phone): 추상 적 인 인 인 터 페 이 스 를 제공 하여 부가 책임 을 받 을 대상 을 규범화 시킨다.
구체 적 인 구성 요소 역할 (ApplePhone): 추가 책임 을 받 을 클래스 를 정의 합 니 다.
장식 역할 (Decorator): 구조물 대상 의 인 스 턴 스 를 가지 고 추상 적 인 구조물 인터페이스 와 일치 하 는 인 터 페 이 스 를 정의 합 니 다.
구체 적 인 장식 캐릭터 (Sticker 와 Accessories): 구조물 대상 에 게 부가 적 인 책임 을 추가 합 니 다.
장식 자 패턴 의 장단 점
장점:
필드 사용
총결산
장식 자 모델 은 계승 이 아 닌 대상 조합 방식 으로 운영 할 때 대상 의 기능 을 동태 적 으로 확장 하 는 능력 을 실 현 했 고 수요 에 따라 여러 가지 기능 을 확대 하여 계승 이 가 져 온 '유연성 차이' 와 '다 자 류 파생' 문 제 를 단독으로 사용 하지 않도록 했다.또한 대상 을 대상 으로 하 는 디자인 원칙 에서 '상속 이 아 닌 대상 조합 우선 사용' 과 '개방 - 폐쇄' 원칙 에 잘 부합된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C \ # 디자인 모델 (3) - 공장 방법 모델그러면 공장 방법 모델 은 시스템 이 공장 류 의 논 리 를 수정 하지 않 고 신제품 을 추가 하 는 것 을 허용 할 수 있다.이렇게 하면 간단 한 공장 모델 의 단점 도 극복 할 수 있다.다음은 공장 모델 의 구체...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.