디자인패턴)Decorator pattern with Java

 

    • 기본적인 기능에 다양한기능들을 추가적으로 추가, 조합을 동적으로 구현할 있는 구조(Structural)패턴 입니다.
    • 객체의 타입과 호출 가능한 메소드를 그대로 유지하면서 객체에 새로운 책임을 추가할 때 사용됩니다.
    • Java.io  InputStream에서 사용되어집니다.
    • Component 
•operation() 
Con cte teComponent 
.com po 
Decorator 
nt 
component-operation() 
super-operation(); 
addedBehavior(); 
ConcæteDecoratorA 
•operation() 
-addedBehavior() 
Con cte teDecoratorB— 
•operation() 
-addedBehavior()
      • 기본기능을 하는 ConcreteComponent클래스와 추가적인 기능을 하는 Decorator클래스를 정의합니다.
    • 여러 재료를 혼합해서 만들어지는 빙수를 예로 코드 구현을 해보겠습니다.
    • Bingsu 
Ice 
.com po 
Bings uDecorator 
•operation() 
nt 
component-operation() 
super-operation(); 
addedBehavior(); 
Redbean 
Milk 
-addedBehavior() 
-addedBehavior()

     

     

    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[] argsthrows IOException{

            Bingsu RedbeanBingsu = new Redbean(new Ice());
            RedbeanBingsu.combination();

            System.out.println(",");

            Bingsu RedbeanMilkBingsu = new Milk(new Redbean(new Ice()));
            RedbeanMilkBingsu.combination();
        }
    }

  • 재귀적으로 구현 할 수 도있고 Decorator의 아이템들을 List로 관리 할 수도 있습니다.
 - 결과 


댓글

가장 많이 본 글