디자인패턴)Decorator pattern with Java
- 기본적인 기능에 다양한기능들을 추가적으로 추가, 조합을 동적으로 구현할 수 있는 구조(Structural)패턴 입니다.
- 객체의 타입과 호출 가능한 메소드를 그대로 유지하면서 객체에 새로운 책임을 추가할 때 사용됩니다.
- Java.io 의 InputStream에서 사용되어집니다.
- 기본기능을 하는 ConcreteComponent클래스와 추가적인 기능을 하는 Decorator클래스를 정의합니다.
- 여러 재료를 혼합해서 만들어지는 빙수를 예로 코드 구현을 해보겠습니다.
public interface Bingsu {
public void combination();
}
public class Ice implements Bingsu{
@Override
public void combination() {
System.out.println("얼음");
}
}
public class BingsuDecorator implements Bingsu{
private Bingsu decoratedBingsu;
public BingsuDecorator(Bingsu decoratedBingsu){
this.decoratedBingsu = decoratedBingsu;
}
@Override
public void combination() {
decoratedBingsu.combination();
}
}
public class Milk extends BingsuDecorator{
public Milk(Bingsu decoratedBingsu) {
super(decoratedBingsu);
}
public void combination(){
super.combination();
add();
}
public void add(){
System.out.println("우유");
}
}
public class Redbean extends BingsuDecorator{
public Redbean(Bingsu decoratedBingsu) {
super(decoratedBingsu);
}
public void combination(){
super.combination();
add();
}
public void add(){
System.out.println("팥");
}
}
public class main {
public static void main(String[] args) throws IOException{
Bingsu RedbeanBingsu = new Redbean(new Ice());
RedbeanBingsu.combination();
System.out.println(",");
Bingsu RedbeanMilkBingsu = new Milk(new Redbean(new Ice()));
RedbeanMilkBingsu.combination();
}
}
- 재귀적으로 구현 할 수 도있고 Decorator의 아이템들을 List로 관리 할 수도 있습니다.
댓글
댓글 쓰기