Monday, December 9, 2013

Design Patterns : Template Method Pattern

Provide Template Code, but leave implementation to the  concrete class.  The template method pattern is a very good example when to make a method as final.


Template method design pattern is to define an algorithm as skeleton of operations and leave the details to be implemented by the child classes. The overall structure and sequence of the algorithm is preserved by the parent class.

http://www.oodesign.com/template-method-pattern.html
http://javapapers.com/design-patterns/template-method-design-pattern/



public abstract class OrderProcessTemplate {
 public boolean isGift;

 public abstract void doSelect();

 public abstract void doPayment();

 public final void giftWrap() {
  System.out.println("Gift wrap done.");
 }

 public abstract void doDelivery();

 public final void processOrder() {
  doSelect();
  doPayment();
  if (isGift) {
   giftWrap();
  }
  doDelivery();
 }
}


public class NetOrder extends OrderProcessTemplate {

 @Override
 public void doSelect() {
  System.out.println("Item added to online shopping cart,");
  System.out.println("Get gift wrap preference,");
  System.out.println("Get delivery address.");
 }

 @Override
 public void doPayment() {
  System.out.println("Online Payment through Netbanking/Cards.");
 }

 @Override
 public void doDelivery() {
  System.out.println("Ship the item through post to delivery address");
 }

}

public class StoreOrder extends OrderProcessTemplate {

 @Override
 public void doSelect() {
  System.out.println("Customer chooses the item from shelf.");
 }

 @Override
 public void doPayment() {
  System.out.println("Pays at counter through cash/POS");
 }

 @Override
 public void doDelivery() {
  System.out.println("Item deliverd to in delivery counter.");
 }

}

No comments: