자바 디자인 모드 - 장식 모드

장식 모델: 동태 적 으로 책임 을 대상 에 게 부가 하여 대상 을 가로 방향 과 확장 시 키 고 계승 보다 탄력 적 인 대체 방안 을 제공 합 니 다.
코드 세 션 을 보고 노래 할 사람 을 만 들 겠 습 니 다.
/**
 * @author Lichenyi
 * @date 2017-7-6
 */
public interface Human {
    public void sing();
}

/ / 이 사람 을 가수 로 포장
/**
 * @author Lichenyi
 * @date 2017-7-4
 */
public class Singer implements Human {
    @Override
    public void sing(){
        System.out.println("    ......");
    }
}

/ / 이 가 수 는 노래 를 부 르 고 있 습 니 다.
/**
 * @author Lichenyi
 * @date 2017-7-5
 */
public class SingerSing extends Singer {
    private Singer singer;
    public SingerSing(Singer singer){
        this.singer = singer;
    }

    @Override
    public void sing() {
        singer.sing();
    }
}

/ / 장식 A – 노래 할 때 춤 추기
/**
 * @author Lichenyi
 * @date 2017-7-5
 */
public class SingerDecorateA  extends SingerSing{

    public SingerDecorateA(Singer singer) {
        super(singer);
    }

    @Override
    public void sing() {
        decorate();
        super.sing();
    }

    private void decorate(){
        System.out.println("  ..");
    }
}

/ / 장식 B – 노래 할 때 음악 이 있어 요
/**
 * @author Lichenyi
 * @date 2017-7-5
 */
public class SingerDecorateB extends SingerSing{

    public SingerDecorateB(Singer singer) {
        super(singer);
    }

    @Override
    public void sing() {
        decorate();
        super.sing();
    }

    private void decorate(){
        System.out.println("      ..");
    }
}

/ / 장식 C – 노래 완료 후 경력 소개
/**
 * @author Lichenyi
 * @date 2017-7-5
 */
public class SingerDecorateC extends SingerSing{

    public SingerDecorateC(Singer singer) {
        super(singer);
    }

    @Override
    public void sing() {
        super.sing();
        decorate();
    }

    private void decorate(){
        System.out.println("    ..");
    }
}

장점: 그 확장 성 이 매우 좋 고 서로 다른 장식 류 를 사용 하여 대상 을 다양한 속성 을 가지 게 하고 유연성 이 직접 계승 하 는 것 보다 좋다.단점: 너무 많은 장식 류 가 생 겨 서 코드 가 이해 하기 어렵 고 잘못 배열 하기 쉽 지 않 습 니 다.
항목 주소:https://github.com/lichenyigit/designModel3-decorate.git

좋은 웹페이지 즐겨찾기