java 디자인 모드의 장식 모드 (decorator)

4877 단어
Java 디자인 모드의 장식 모드

설명:


장식 모드는 원본 파일을 바꾸거나 계승을 사용할 필요가 없는 상황에서 동적으로 대상을 확장하는 기능이다.그것은 포장 대상, 즉 장식을 통해 진실을 감싸는 대상을 만든다.

장식 모델의 특징;


(1) 장식 대상과 실제 대상은 같은 인터페이스를 가진다.이렇게 하면 클라이언트 대상은 실제 대상과 같은 방식으로 장식 대상과 상호작용할 수 있다.
(2) 장식 대상은 실제 대상의 색인을 포함한다(reference)
(3) 장식 대상은 클라이언트로부터 모든 요청을 받아들인다.그것은 이 요청들을 실제 대상에게 전달한다.
(4) 장식 대상은 이러한 요청을 전달하기 전이나 이후에 추가 기능을 추가할 수 있다.이렇게 하면 운행 시 주어진 대상의 구조를 수정하지 않아도 외부에 추가 기능을 추가할 수 있다.대상을 대상으로 하는 디자인에서 일반적으로 계승을 통해 주어진 클래스에 대한 기능 확장을 실현한다.
다음 표에서는 장식 모드와 상속의 차이점을 보여 줍니다.

장식 모드 VS 계승


장식 모드 계승
특정 대상을 확장하는 기능
하위 클래스 필요 없어 하위 클래스 필요
동적
실행 시 직책 분배 컴파일 시 직책 분배
자류로 인한 복잡함과 혼란으로 인해 많은 자류가 발생하는 것을 방지하고, 일부 장소에서는 누락류의 차원을 보고한다.
유연성 향상 유연성 부족
주어진 대상에 대해 서로 다른 장식 대상이 있을 수 있으므로 클라이언트는 필요에 따라 적당한 장식 대상을 선택하여 메시지를 보낼 수 있다.모든 가능한 연합에 대해 고객의 기대
어떤 어려움도 증가시키기 쉽다

예:

Component(      ---              )
package com.dylan.gof.pattern.decorator;

/**
 * Generated by StarUML(tm) Java Add-In
 * @ Project : Untitled
 * @ File Name : Decorator.java
 * @ Date : 2011-2-16
 * @ Author : Dylan
 * 
 * @desc:
 *     :
 * 		         ,           ,             。
*/

public interface Component {
	public void go();
}
       (        .         ,                 
package com.dylan.gof.pattern.decorator;

/**
 * Generated by StarUML(tm) Java Add-In
 * @ Project : Untitled
 * @ File Name : Decorator.java
 * @ Date : 2011-2-16
 * @ Author : Dylan
 * 
 * @desc:
 *     :
 * 		        .         ,                 
*/




public class ConcreteComponent implements Component {

	public void go() {
		System.out.println("  ");
		
	}
}
    :          ,        ,          ,               ,
 *    ,         Component   ,           Component,              
 *       。
package com.dylan.gof.pattern.decorator;

/**
 * Generated by StarUML(tm) Java Add-In
 * @ Project : Untitled
 * @ File Name : Decorator.java
 * @ Date : 2011-2-16
 * @ Author : Dylan
 * 
 * @describle
 *      :          ,        ,          ,               ,
 *    ,         Component   ,           Component,              
 *       。
*/

public class Decorator implements Component {
	public Component component;
	protected Decorator(Component component) {
        this.component = component;
    }
	 public void go() {

        this.component.go();

    }
}
    (            ,  +      s)
package com.dylan.gof.pattern.decorator;

/**
 * Generated by StarUML(tm) Java Add-In
 * @ Project : Untitled
 * @ File Name : Decorator.java
 * @ Date : 2011-2-16
 * @ Author : Dylan
 * 
 * @desc
 *     (            ,  +      s)
*/

//
public class ConcreteDecoratorSing extends Decorator {

	protected ConcreteDecoratorSing(Component component) {
		super(component);
		// code is here
	}

	public void go() {
		listen("   ");//       
		super.go();
	}

	private void listen(Object obj) {
		System.out.println(obj);
	}
}
package com.dylan.gof.pattern.decorator;

/**
 * Generated by StarUML(tm) Java Add-In
 * @ Project : Untitled
 * @ File Name : Decorator.java
 * @ Date : 2011-2-16
 * @ Author : Dylan
*/

//    (            ,  +      s)
//     ,            Component
public class ConcreteDecoratorListenDump extends Decorator {

	protected ConcreteDecoratorListenDump(Component component) {
		super(component);
		// code is here
	}

	public void go() {
		component.go();
		System.out.println(dump());
		//       
	}

	private String dump() {
		return "  ";
	}
}
package com.dylan.gof.pattern.decorator;

/**
 * Generated by StarUML(tm) Java Add-In
 * @ Project : Untitled
 * @ File Name : Decorator.java
 * @ Date : 2011-2-16
 * @ Author : Dylan
*/

//    (            ,  +      s)
//     ,            Component
public class ConcreteDecoratorListen extends Decorator {

	protected ConcreteDecoratorListen(Component component) {
		super(component);
		// code is here
	}

	public void go() {
		component.go();
		System.out.println(sing());
		//       
	}

	private String sing() {
		return "  ";
	}
}
package com.dylan.gof.pattern.decorator;
/**
 * Generated by StarUML(tm) Java Add-In
 * @ Project : Untitled
 * @ File Name : Decorator.java
 * @ Date : 2011-2-16
 * @ Author : Dylan
*/
public class Client {
	public static void main(String[] args) {

		Component component = new ConcreteComponent();

		ConcreteDecoratorListen cdl = new ConcreteDecoratorListen(component);

		cdl.go();

		System.out.println();

		Component cds = new ConcreteDecoratorSing(component);

		cds.go();
		
		System.out.println();
		
		Component dump=new ConcreteDecoratorListenDump(cdl);
		dump.go();
		
		
		

	}
}

좋은 웹페이지 즐겨찾기