ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Decorator Pattern
    Java/디자인패턴 2024. 1. 11. 17:39

    🍦 Decorator Pattern

    • 객체에 추가 요소를 동적으로 더할 수 있는 디자인 패턴
    • 서브 클래스 만들 때보다 훨씬 유연하게 기능을 확장할 수 있음 
    • 데코레이터의 슈퍼 클래스는 자신이 장식하고 있는 객체의 슈퍼 클래스와 동일 ~ 원래 객체에 들어갈 자리에 데코레이터 넣어도 상관 X
    • 힌 객체를 여러 개의 데코레이터로 감쌀 수 있음
    • 객체는 언제든지 감쌀 수 있음, 실행중에 필요한 데코레이터를 마음대로 적용 가능 

     

    -  객체 구성(인스턴스 변수로 다른 객체 저장하는 방식) 사용 ~ 첨가물을 다양하게 추가해도 유연성을 잃지 않도록 

     

    예시 ) 커피 주문

    public abstract class Beverage {
    	String description = "제목 없음";
        
        public String getDescription() {
        	return description;
        }
        
        public abstract double cost();
    }
    
    // 데코레이터
    public abstract class CondimentDecorator extends Beverage {
    	Beverage beverage;
        public abstract Stromg getDescription;
    }
    
    // 음료 
    public class Espresso extends Beverage {
    	public Espresso() {
        	description = "에스프레소";
        }
        public double cost() {
        	return 1.9;
        }
    }
    
    // 첨가물
    public class Mocha extends CondimentalDecorator {
    	public Mocha(Beverage beverage) {
        	this.beverage = beverage;
        }
        
        public String getDescription() {
        	return beverage.getDescription() + ", 모카";
        }
        
        public double cost() {
        	return beverage.cost() + .20;
        }
    }
    
    
    Beverage beverage = new DarkRoast();
    beverage = new Mocha(beverage);
    beverage = new Whip(beverage);

     

    🍦 또 다른 예시 - Java IO

    • InputStream : 추상 구성 요소 
      • FileInputStream (바이트까지는 데코레이터에 감싸이는 구상 구성 요소)
      • StringBufferInputStream
      • ByteArrayInputStream 
      • FileInputStream (추상 데코레이터)
        • BufferedInputStream (구상 데코레이터들) 
        • DataInputStream

     

     

     

    🍦 기타 주의점 

    • 데코레이터를 끼워 넣어도 클라이언트가 데코레이터를 사용하고 있음을 모른다는 것이 장점이다.
      •  따라서 특정 형식에 의존하는 코드에 데코레이터 그냥 적용하면 이 장점을 살릴 수 없음
    • 구성 요소 인스턴스를 꽤 많은 데코레이터로 감싸야 하는 경우가 있음
    • 잡다한 클래스가 너무 많아질 수도 있음 

     

    'Java > 디자인패턴' 카테고리의 다른 글

    Factory Pattern  (0) 2024.01.17
    Observer Pattern  (0) 2024.01.04
Designed by Tistory.