1) 개요
상위 클래스에서 처리의 흐름을 제어하며, 하위클래스에서 처리의 내용을 구체화하는 디자인 패턴입니다.
공통되는 사항은 상위 추상 클래스에서 구현하며, 각 객체마다 다른 부분은 하위 클래스에서 구현합니다.
상속을 통한 확장 개발 방법으로 코드의 중복을 줄이고, 리팩토링(Refactoring)에 유리하여 가장 많이 사용되는 패턴 중 하나입니다.
2) UML
- Abstract Class : 추상 클래스로 templateMethod를 정의합니다.
- Concrete Class : 부모 클래스에서 abstract로 정의된 templateMethod를 구현합니다.
3) 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public abstract class OrderProcessTemplate { public abstract void doSelect(); public abstract void doPayment(); public abstract void doDelivery(); public final void giftWrap() { try { System.out.println("Gift wrap successful"); } catch (Exception e) { System.out.println("Gift wrap unsuccessful"); } } public final void processOrder(boolean isGift) { doSelect(); doPayment(); if (isGift) giftWrap(); doDelivery(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class StoreOrder extends OrderProcessTemplate{ @Override public void doSelect() { System.out.println("Do Select : Customer chooses the item from shelf."); } @Override public void doPayment() { System.out.println("Do Payment : Pays at counter through cash/POS"); } @Override public void doDelivery() { System.out.println("Do Delivery : Item deliverd to in delivery counter."); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class NetOrder extends OrderProcessTemplate{ @Override public void doSelect() { System.out.println("Do Select : Item added to online shopping cart"); System.out.println("Do Select : Get gift wrap preference"); System.out.println("Do Select : Get delivery address."); } @Override public void doPayment() { System.out.println ("Do Payment : Online Payment through Netbanking, card or Paytm"); } @Override public void doDelivery() { System.out.println ("Do Delivery : Ship the item through post to delivery address"); } } | cs |
1 2 3 4 5 6 7 8 9 | public class Main { public static void main(String[] args) { OrderProcessTemplate netOrder = new NetOrder(); netOrder.processOrder(true); System.out.println(); OrderProcessTemplate storeOrder = new StoreOrder(); storeOrder.processOrder(true); } } | cs |
'IT > 디자인 패턴(Design Pattern)' 카테고리의 다른 글
[디자인 패턴] 전략 패턴(Strategy Pattern) (0) | 2019.02.15 |
---|---|
[디자인 패턴] 상태 패턴(State Pattern) (0) | 2019.02.15 |
[디자인 패턴] 방문자 패턴(Visitor Pattern) (2) | 2019.02.14 |
[디자인 패턴] 메멘토 패턴(Memento Pattern) (0) | 2019.02.13 |
[디자인 패턴] 중재자 패턴(Mediator Pattern) (0) | 2019.02.12 |