본문 바로가기
프로그래밍/JAVA

java 디자인 패턴 Decorator 패턴

by 애플 로그 2021. 2. 17.
반응형

java 디자인 패턴  Decorator 패턴 

 

Decorator 패턴에 대해 알아보자.

 

Decorator 패턴은 무엇일까???

 



케익 베이스가 있다고 하자.

케익에 크림을 바르면 아무것도 없는 케익이다.

거기다가 딸기를 얹으면 스트로베리 케익

초콜릿으로 이름을 쓰고 초를 꽃으면 생일 케익이 완성된다.
 

객체도 이런 케이크와 비슷한 경우가 있다.

우선 케익베이스 처럼 중심이 되는 객체에 장식과 비슷한 기능을 하나씩

입히면 좀더 목적에 어울리는 객체가 완성된다.

 

이와같은 데코레이션을 해나가는 디자인 패턴을  Decorator 패턴이라고 한다.

 

아래 소스를 참고 보자 !!

 

 

Component.java ( abstract class ) <- 백설기

 

 

package com.decorator;

 

public abstract class Component {

 

public abstract String getYnkim();

 

}

 

 

 

 

ConcreteComponent.java <- 구체적인 백설기

 

 package com.decorator;

 

public class ConcreteComponent extends Component {

 

 

private String str;

 

 public ConcreteComponent (String str)

 {

super();

this.str = str;

 }

 

 

 public String getYnkim()

 {

 return str;

 }

 

}

 

 

 

 

Decorator.java ( abstract class ) <- 백설기 역할과 동일한 인터페이스를 가짐 (장식자의 역할)

자신이 장식할 대상을 알고있다.

 

 

package com.decorator;

 

public  abstract class  Decorator  extends Component{

 

 

protected Component component;

 

protected Decorator (Component component)

{

this.component  = component;

}

 

}

 

 

 

 

 

ConcreteDecorator.java  <-  팥으로 장식하자. (구체적인 장식자의 역할)

 

 package com.decorator;

 

public class ConcreteDecorator extends Decorator {

 

public ConcreteDecorator (Component component)

{

super(component);

}

 

public String getYnkim()

{

return "팥" +component.getYnkim() + "팥";

}

}

 

 

 

 

Main.java 실행 클래스 

 package com.decorator;

 

public class Main {

 

 

public static void main(String[] args) {

 

Component  c1 = new ConcreteComponent("백설기");

 

System.out.println(c1.getYnkim());

 

Component c2 = new ConcreteDecorator(c1);

 

System.out.println(c2.getYnkim());

}

}

 

 

 

 

결과

백설기

팥|백설기|팥

댓글