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