Contents
1. 데코레이터 패턴 이해 코드(햄버거 만들기🍔🍔🍔)객체의 기능을 동적으로 추가하거나 확장할 수 있는 디자인 패턴으로 객체를 수정하지 않고도 새로운 기능을 덧붙일 수 있어, 상속보다 유연하게 기능을 확장할 수 있다.
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