[디자인 모드] - 데 코 레이 터 모드 는 잘 라 줘 야 돼 요. 부침 개 한 세트.

인 테 리 어 모델 은 기 존 대상 을 바 꾸 지 않 고 대상 에 기능 을 추가 해 계승 보다 탄력 있 는 대안 을 제공 하 는 것 을 말한다.
장식 자 모드 적용 필드
  • 하나의 기능 을 확장 하거나 하나의 클래스 에 추가 직책 을 추가 하 는 데 사용 합 니 다
  • 동태 적 으로 한 대상 에 게 기능 을 추가 하면 이런 기능 은 동태 적 으로 취소 할 수 있다
  • .
    장식 자 모드 의 응용 장면
    예 를 들 어 제 가 아침 에 가장 좋아 하 는 아침 식 사 는 부침 개 입 니 다. 오 일 스틱 이나 바삭 한 전 을 넣 고 곱 창 을 굽 는 것 입 니 다. 생각 할 수록 맛 있 습 니 다. 먼저 추상 적 인 BatterCake 류 를 만 듭 니 다.
    public abstract class BatterCake {
    
        protected abstract String getName();
    
        protected abstract int getPrice();
    }
    

    기본 부침 개 만 들 기 BaseBatterCake
    public class BaseBatterCake extends BatterCake {
        @Override
        protected String getName() {
            return "  ";
        }
    
        @Override
        protected int getPrice() {
            return 5;
        }
    }
    

    패키지 의 추상 장식 자 BatterCakeDecorator 를 더 확장 합 니 다.
    public abstract class BatterCakeDecorator extends BatterCake{
    
        private BatterCake batterCake;
    
        public BatterCakeDecorator(BatterCake batterCake) {
            this.batterCake = batterCake;
        }
    
        protected abstract void doSomething();
    
        @Override
        protected String getName() {
            return this.batterCake.getName();
        }
    
        @Override
        protected int getPrice() {
            return this.batterCake.getPrice();
        }
    }
    

    달걀 장식 자 클래스 만 들 기
    public class EggDecorator extends BatterCakeDecorator {
        public EggDecorator(BatterCake batterCake) {
            super(batterCake);
        }
    
        @Override
        protected void doSomething() {
    
        }
    
        @Override
        protected String getName() {
            return super.getName()+" egg";
        }
    
        @Override
        protected int getPrice() {
            return super.getPrice()+1;
        }
    }
    

    소시지 인 테 리 어 클래스
    public class SausageDecorator extends BatterCakeDecorator {
        public SausageDecorator(BatterCake batterCake) {
            super(batterCake);
        }
    
        @Override
        protected void doSomething() {
    
        }
    
        @Override
        protected int getPrice() {
            return super.getPrice()+2;
        }
    
        @Override
        protected String getName() {
            return super.getName()+" sausage";
        }
    }
    

    테스트 해 봐.
    public class Test {
    
        public static void main(String[] args) {
            BatterCake batterCake;
    
            batterCake = new BaseBatterCake();
    
            batterCake = new EggDecorator(batterCake);
    
            batterCake = new EggDecorator(batterCake);
    
            batterCake = new SausageDecorator(batterCake);
    
            System.out.println(batterCake.getName());
            System.out.println(batterCake.getPrice());
        }
    }
    

    테스트 를 통 해 먼저 기초 부침 개 를 만 든 다음 에 세트 내용 을 계속 늘 리 면 가격 도 자동 으로 달라 진 다 는 것 을 알 수 있다.장식 자의 본질 적 인 특징 은 기 존의 유형의 부가 기능 을 추출 하여 기 존의 논 리 를 간소화 하 는 것 이다.
    장식 자 모드 와 어댑터 모드 비교
    장식 자 모드
    어댑터 모드
    형식.
    특별한 어댑터 모드, 등급 관계 포함
    관계
    정의.
    장식 자 와 피 장식 자 는 모두 같은 인 터 페 이 스 를 실현 했다. 주요 목적 은 확 장 된 후에 도 OOP 관 계 를 유지 하 는 것 이다.
    어댑터 와 피 어댑터 는 필연 적 인 관계 가 없 으 며, 일반적으로 계승 또는 대리 의 형식 으로 포장 된다.
    관계.
    만족
    만족 하 다
    기능.
    덮어 쓰기, 확장 중시
    호 환 을 중시 하 다
    설계 하 다.
    사전에 고려 하 다.
    뒷 생각
    장식 자 패턴 의 장단 점
    장점:
  • 장식 자 는 계승 에 힘 이 있 고 계승 보다 유연 하 며 원래 의 대상 을 바 꾸 지 않 는 상황 에서 동태 적 으로 한 대상 에 게 기능 을 확장 하 는 것
  • 서로 다른 장식 류 와 이런 장식 류 의 서로 다른 조합 을 통 해 서로 다른 효 과 를 실현 할 수 있다
  • 장식 자 모델 의 개폐 원칙 준수 단점:
  • 더 많은 코드, 더 많은 클래스, 프로그램의 복잡성 증가
  • 동적 장식 시 다 층 장식 이 더욱 복잡 하 다
  • 좋은 웹페이지 즐겨찾기