JAVA 디자인 모드. - 장식 모드.

장식 양식 은 말 그대로 기 존 사물 을 미화 하고 강화 한 다 는 뜻 이다.증강 기능, 우 리 는 자바 의 계승 이 실 현 될 수 있다 는 것 을 알 고 있 습 니 다. 그러면 장식 모델 은 무엇 입 니까?차이 점 은 바로 '동태' 에 있다. 장식 모델 은 동태 적 으로 대상 에 게 강화 되 고 폭발 을 피 할 수 있다.만약 에 특정한 기능 을 실현 하기 위해 하나의 하위 클래스 를 실현 해 야 한다 면 많은 기능 을 실현 하려 면 많은 하위 클래스 가 필요 하지 않 을 까? 그리고 하위 클래스 가 확정 되면 그 기능 은 컴 파일 시기 에 확정 되 고 정태 적 인 것 이다.자바 에서 IO 는 이 모드 를 충분히 사용 했다.우 리 는 자바 IO 에서 Reader, Writer, InputStream, OutputStream 등 추상 적 인 유형 이 있 는 것 을 보 았 다. 다른 유형 은 이런 유형 에 대한 장식, 강화 일 뿐이다.장식 자 와 피 장식 자 는 공 통 된 초 류 를 가지 고 있다.
예 를 들 어:
우 리 는 인터넷 에서 휴대 전 화 를 사고 싶다. 만약 에 애플 X, 4000 대양 을 샀 다 면? 그리고?누 드 기기 만 있 고 우 리 는 부품 을 사서 그것 의 기능 을 강화 하려 고 한다. 인터넷 쇼핑 몰 에는 많은 부품 이 있다. 예 를 들 어 핸드폰 케이스 30 대양, Beats 이어폰 500 대양 등 이다.
우 리 는 현재 계승 으로 이 문 제 를 처리 하고 핸드폰 추상 류, 애플 핸드폰 추상 류 를 정의 합 니 다. (Mobile. java)
package extend;
/**
 *       
 */
public abstract class Mobile {

    /**
     *     
     */
    protected String name;
    /**
     *   
     */
    protected Double price;


    /**
     *     
     * @return
     */
    public abstract String getName();
    /**
     *     
     * @return
     */
    public abstract double getPrice();
}


애플 폰 클래스 (애플 모 바 일 자바)
package extend;
/**
 *     
 */
public class AppleMobile extends Mobile{

    @Override
    public double getPrice() {
        return this.price;
    }

    @Override
    public String getName() {
        return this.name;
    }

    public AppleMobile() {
        this.name = "    ";
        this.price = 5000d;
    }
}


만약 우리 가 휴대 전화 케이스 를 하나 더 사고 싶다 면, 하나의 자 류 를 실현 해 야 한다.
package extend;
/**
 *    +         
 */
public class MobileCaseAppleMobile extends AppleMobile{

    private String mobileCaseName(){
        return " +    ";
    }

    private Double mobileCasePrice(){
        return 30d;
    }

    @Override
    public String getName() {
        return super.getName() + mobileCaseName();
    }

    @Override
    public double getPrice() {

        return super.getPrice() + mobileCasePrice();
    }
}
package extend;

public class Demo {

    public static void main(String[] args) {

        Mobile mobile = new MobileCaseAppleMobile();

        System.out.println(mobile.getName());
        System.out.println(mobile.getPrice());
    }
}

대응 출력: 아이 폰 + 케이스 503.00
우리 가 애플 폰 + 이어폰 을 사려 면?그러면 또 다른 하위 클래스 를 실현 해 야 한다. 한 세트 에 해당 한다.그러나 부품 이 점점 많아 지면 우 리 는 매우 많은 세트 에 대응 해 야 한다. 이런 상황 에서 이른바 폭발 이 발생 할 것 이다.
장식 모드 로 처리 하면 요?우 리 는 하나의 핸드폰 추상 류, 하나의 애플 핸드폰 류, 하나의 부품 장식 추상 류, 하나의 이어폰 부품 장식 류, 하나의 핸드폰 케이스 부품 장식 류 를 정의 한다.
핸드폰 추상 클래스: (Mobile. java)
package decorator;
/**
 *       
 */
public abstract class Mobile {

    /**
     *     
     */
    protected String name;
    /**
     *   
     */
    protected Double price;


    /**
     *     
     * @return
     */
    public abstract String getName();
    /**
     *     
     * @return
     */
    public abstract double getPrice();
}

애플 폰 클래스 (애플 모 바 일 자바)
package decorator;
/**
 *     
 */
public class AppleMobile extends Mobile{

    @Override
    public double getPrice() {
        return this.price;
    }

    @Override
    public String getName() {
        return this.name;
    }

    public AppleMobile() {
        this.name = "    ";
        this.price = 5000d;
    }
}

부품 장식 추상 클래스 (Accessories. java)
package decorator;
/**
 *      ,             ,    
 */
public abstract class Accessories extends Mobile{

    /**
     *        
     */
    protected Mobile mobile;

    public Accessories(Mobile mobile) {
        this.mobile = mobile;
    }

    //      
    public abstract String getDecoratorName();
}

이어폰 부품 장식 류 (Headset. java)
package decorator;
/**
 *         
 */
public class Headset extends Accessories{

    public Headset(Mobile mobile) {
        super(mobile);
    }

    @Override
    public String getName() {
        return mobile.getName() + "+" +getDecoratorName();
    }

    @Override
    public double getPrice() {
        return mobile.getPrice() + 500d;
    }

    @Override
    public String getDecoratorName() {

        return "Beats  ";
    }
}

핸드폰 케이스 부품 장식 류 (MobileCase. java)
package decorator;
/**
 *         
 */
public class MobileCase extends Accessories{

    public MobileCase(Mobile mobile) {
        super(mobile);
    }

    @Override
    public String getName() {

        return mobile.getName() + "+" + getDecoratorName();
    }

    @Override
    public double getPrice() {

        return mobile.getPrice() + 30d;
    }

    @Override
    public String getDecoratorName() {
        return "   ";
    }
}
package decorator;

public class Demo {

    public static void main(String[] args) {

        Mobile mobile = new AppleMobile();
        System.out.println(mobile.getName());
        System.out.println(mobile.getPrice());
        mobile = new MobileCase(mobile);
        System.out.println(mobile.getName());
        System.out.println(mobile.getPrice());
        mobile = new Headset(mobile);
        System.out.println(mobile.getName());
        System.out.println(mobile.getPrice());
    }
}

대응 수출: 아이 폰 5000.0 아이 폰 + 케이스 503.00 아이 폰 + 케이스 + 비트 이어폰 5530.0
위 와 같이 우 리 는 동태 적 으로 조합 할 수 있 고 동태 적 으로 우리 가 필요 로 하 는 핸드폰 을 강화 할 수 있다. 만약 에 우리 가 아이 폰 + 핸드폰 케이스 만 있 으 면
package decorator;

public class Demo {

    public static void main(String[] args) {

        Mobile mobile = new AppleMobile();
        mobile = new MobileCase(mobile);
        System.out.println(mobile.getName());
        System.out.println(mobile.getPrice());
    }
}

대응 출력: 아이 폰 + 케이스 503.00
이 를 통 해 알 수 있 듯 이 우 리 는 장식 모델 을 사용 하고 부품 유형 을 새로 추가 하려 면 부품 류 를 추가 합 니 다.그리고 구 매 할 때 프 리 조합 하면 돼 요.

좋은 웹페이지 즐겨찾기