-
디자인 패턴 - 템플릿 콜백 패턴(Template Callback Pattern)Java 2022. 3. 21. 01:00
전략 패턴의 변형으로, 스프링의 DI에서 사용하는 특별한 형태의 전략 패턴.
전략을 익명 내부 클래스로 정의해서 사용.
전략 인터페이스
public interface Stragegy{ public abstract void runStrategy(); }컨텍스트
# 컨텍스트 public class Soldier{ void runContext(Strategy strategy){ System.out.println("전투 시작"); strategy.runStrategy(); System.out.println("전투 종료"); } }클라이언트
public class Client{ public static void main(String[] args){ Soldier rambo = new Soldier(); rambo.runContext(new Strategy(){ @Override public void runStrategy(){ System.out.println("총! 총총총!!"); } }); System.out.println(); rambo.runContext(new Strategy(){ @Override public void runStrategy(){ System.out.println("칼! 칼칼칼!!"); } }); System.out.println(); rambo.runContext(new Strategy(){ @Override public void runStrategy(){ System.out.println("활! 활활활!!"); } }); } }이것이 템플릿 콜백 패턴인데, 반복되는 부분이 많으므로 컨텍스트를 수정할 수 있다.
컨텍스트 수정
# 컨텍스트 수정 public class Soldier{ void runContext(String weaponSound){ System.out.println("전투 시작"); executeWeapon(weaponSound).runStrategy(); System.out.println("전투 종료"); } private Strategy executeWeapon(final String weaponSound){ return new Strategy(){ @Override public void runStrategy(){ System.out.println(weaponSound); } } } }이처럼 수정하면 Client 코드를 아래와 같이 수정할 수 있다.
public class Client{ public static void main(String[] args){ Soldier rambo = new Soldier(); rambo.runContext("총! 총총총!!"); System.out.println(); rambo.runContext(칼! 칼칼칼!!"); System.out.println(); rambo.runContext("활! 활활활!!"); } }"전략을 익명 내부 클래스로 구현한 전략 패턴"
'Java' 카테고리의 다른 글
디자인 패턴 - 전략 패턴(Strategy Pattern) (0) 2022.03.21 디자인 패턴 - 팩터리 메서드 패턴(Factory Method Pattern) (0) 2022.03.18 디자인 패턴 - 템플릿 메서드 패턴(Template Method Pattern) (0) 2022.03.18 디자인 패턴 - 싱글턴 패턴(Singleton Pattern) (0) 2022.03.17 디자인 패턴 - 데코레이터 패턴(Decorator Pattern) (0) 2022.03.17