差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
study:java:design_pattern:decorator [2008/08/10 15:19] – created bananastudy:java:design_pattern:decorator [2008/09/03 14:25] (現在) banana
行 1: 行 1:
 ====== the definition of Decorator Pattern ====== ====== the definition of Decorator Pattern ======
-데코레이터 패턴은 다음과 같이 정의됩니다.+**데코레이터 패턴**은 다음과 같이 정의됩니다.
 <code> <code>
-**데코레이터 패턴**에서는 객체에 추가적인 요건을 동적으로 첨가한다.+데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 첨가한다.
 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할
 수 있는 방법을 제공한다. 수 있는 방법을 제공한다.
 </code> </code>
 +
 +{{keywords>Decorator Pattern}}
 +
  
 ===== Class Diagram ===== ===== Class Diagram =====
 {{:study:java:design_pattern:decorator.jpg|}} {{:study:java:design_pattern:decorator.jpg|}}
 +
 +여기서 %%ContimentDecorator%% 클래스는 추상클래스로서 Beverage클래스의 구성요소이다. 즉 데코레이터 안에는 Component
 +객체가 들어있습니다. 구성요소에 대한 레퍼런스로서 인스턴스 변수가 들어가 있지요.
 +그러므로, Decorator는 자신이 장식할 구성요소와 같은 인터페이스 또는 추상 클래스를 구현합니다.
 +%%ContimentDecorator%%를 구상하는 클래스는 그 객체가 장식하고 있는 Component객체(이 경우에는 Beverage 클래스)를 위한
 +인스턴스 변수가 있습니다. 데코레이터에서 새로운 메소드를 추가할 수도 있습니다. 하지만 일반적으로 새로운 메소드를 추가하는
 +대신 Component에 원래 있던 메소드를 호출하기 전, 또는 후에 별도의 작업을 처리하는 방식으로 새로운 기능을 추가합니다.
 +
 +
 +
 +===== Implementation =====
 +예로서 위의 클래스 다이어그램에 나와있는 구상 클래스의 소스코드를 소개합니다.
 +먼저 음료(Beverage)를 구현한 소스코드입니다.
 +<code java>
 +public class Espresso extends Beverage{
 +     public Espresso(){
 +         description = "espresso";
 +     }
 +
 +     public double cost(){
 +         return 1.99;
 +     }
 +}
 +</code>
 +
 +<code java>
 +public class HouseBlend extends Beverage(
 +     public HouseBlend(){
 +         description = "HouseBlend coffee";
 +     }  
 +     public double cost(){
 +         return .89;
 +     }  
 +}
 +</code>
 +이제 음료에 첨가되는 첨가물용 구상 데코레이터를 구현해보죠. 다음은 모카를 구현한 코드입니다.
 +
 +<code java>
 +public class Mocha extends CondimentDecorator{
 +    Beverage beverage;
 +    
 +    public Mocha(Beverage beverage){
 +         this.beverage = beverage;
 +    }
 +    public String getDescription(){
 +         return beverage.getDescription() + ", Mocha";
 +    }
 +    public double cost(){
 +         return .20 + beverage.cost();
 +    }
 +}
 +</code>

QR Code
QR Code study:java:design_pattern:decorator (generated for current page)