SMALL
장식자 패턴은 객체에 동적 기능을 추가하기 위해 구조를 개선하는 패턴이다.
다양한 확장을 위해 객체를 조합한다.
장식자 패턴은 기존 객체를 확장하기 위해 무언가를 추가 장식합니다.
장식자는 기본 베이스의 객체를 시작점으로 장식을 추가해 객체를 확장합니다.
장식자 패턴은 동적으로 객체를 결합하기 위해서 객체지향의 구성을 통해 확장한다.
장식자 패턴은 4개의 구성 요소로 이루어져 있습니다.
- Component : 인터페이스를 정의
- ConcreteComponent : 인터페이스에 정의 실제를 구현
- Decorator : 컴포넌트를 참조하여 인터페이스를 일치화
- ConcreteDecorator : 확장 및 추가되는 기능을 작성
Component - 공통 기능을 정의
public interface Component {
public String product();
public int price();
}
ConcreteComponent
public class Product1 implements Component {
@Override
public String product() {
return "one pice";
}
@Override
public int price() {
return 20000;
}
}
Decorator
장식자 패턴을 적용하기 위해 컴포넌트와 동일한 인터페이스를 유지해야 한다
public abstract class Decorate implements Component {
abstract public String product();
abstract public int price();
}
장식자 추상 클래스를 선언할 때 컴포넌트 인터페이스를 같이 적용
장식자는 객체를 확장할 때 구성을 사용한다.
인터페이스를 적용하는 이유는 단지 객체의 통일화된 사용을 위해서이다.
장식자는 실제 장식을 구현하기 위한 껍데기일 뿐이다.
ConcreteDecorator
public class CpuI7 extends Decorate {
public Component base;
CpuI7(Component concrete) {
this.base = concrete;
}
@Override
public String product() {
return base.product() + ", i7";
}
@Override
public int price() {
return base.price() + 475000;
}
}
public class Ssd256 extends Decorate {
public Component base;
Ssd256(Component concrete) {
this.base = concrete;
}
@Override
public String product() {
return base.product() + ", ssd256";
}
@Override
public int price() {
return base.price() + 11000;
}
}
실행 예시
public static void main(String[] args) {
Component p1 = new Product1(); // ConcreteComponent
Component i7 = new CpuI7(p1); // ConcreteDecorator
Component ssd256 = new Ssd256(i7); // ConcreteDecorator
System.out.println("product : " + ssd256.product());
System.out.println("price : " + ssd256.price());
}
//
product : one pice, i7, ssd256
price : 506000
LIST
'DesignPattern' 카테고리의 다른 글
[DesignPattern] Facade Pattern (퍼사드 패턴) (0) | 2021.06.17 |
---|---|
[DesignPattern] Composite Pattern (복합체 패턴) (0) | 2021.06.11 |
[DesignPattern] Bridge Pattern ( 브리지 패턴 ) (0) | 2021.06.02 |
[DesignPattern] Adapter Pattern ( 어댑터 패턴 ) (0) | 2021.05.25 |
[DesignPattern] Prototype Pattern ( 프로토타입 패턴 ) (0) | 2021.05.24 |