[디자인패턴] 7. 데코레이터패턴

silver's avatar
Nov 13, 2024
[디자인패턴] 7. 데코레이터패턴
 
객체의 기능을 동적으로 추가하거나 확장할 수 있는 디자인 패턴으로 객체를 수정하지 않고도 새로운 기능을 덧붙일 수 있어, 상속보다 유연하게 기능을 확장할 수 있다.
 

1. 데코레이터 패턴 이해 코드(햄버거 만들기🍔🍔🍔)

 
인터페이스
기본 인터페이스로, 데코레이터와 컴포넌트가 구현해야할 공통 기능을 정의한다.
public interface Material { void add(); }
 
데코레이터 클래스
public class Bread implements Material { Material material; public Bread() {} public Bread(Material material) { this.material = material; } @Override public void add() { // material이 존재하면 다른 것 추가하고 빵을 추가하고 // material이 없으면 바로 빵을 추가하고 끝!!! if(material!= null) material.add(); System.out.println("Bread"); } } public class Cheese implements Material{ Material material; public Cheese() {} public Cheese(Material material) { this.material = material; } @Override public void add() { if(material!=null)material.add(); System.out.println("Cheese"); } } public class Chicken implements Material { Material material; public Chicken() {} public Chicken(Material material) { this.material = material; } public void add(){ if(material!= null) { material.add(); } System.out.println("Chicken"); } } public class Lettuce implements Material { Material material; // 기본 생성자 public Lettuce() {} public Lettuce(Material meterial) { this.material = meterial; } public void add(){ if(material!=null){ material.add(); } System.out.println("Lettuce"); } }
public class Patty implements Material { Material material; public Patty() {} public Patty(Material material) { this.material = material; } public void add(){ if(material!=null) material.add(); System.out.println("Patty"); } } // 나머지 하위 클래스들은 토글 아래로....
import hamburger.material.Material; public class ChickenBurger implements Burger { Material material; public ChickenBurger() {} public ChickenBurger(Material material) { this.material = material; } @Override public void make() { System.out.println("치킨버거 시작!"); if(material != null) {material.add();} } }
App
package hamburger; import hamburger.burger.Burger; import hamburger.burger.ChickenBurger; import hamburger.material.Bread; import hamburger.material.Cheese; import hamburger.material.Chicken; import hamburger.material.Lettuce; public class App { public static void main(String[] args) { Burger b1 = new ChickenBurger(); b1.make(); Burger b2 = new ChickenBurger(new Bread(new Chicken(new Cheese(new Lettuce(new Bread()))))); b2.make(); } }
 
결과
치킨버거 시작! 치킨버거 시작! Bread Lettuce Cheese Chicken Bread
 
Share article

silver