Skip to content

Instantly share code, notes, and snippets.

@miteshsureja
Created May 13, 2018 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miteshsureja/11ffe894e8777aba03f9c15553ba2ddb to your computer and use it in GitHub Desktop.
Save miteshsureja/11ffe894e8777aba03f9c15553ba2ddb to your computer and use it in GitHub Desktop.
Template Method Design Pattern
using System;
namespace TemplatePattern
{
//Template abstract class
public abstract class OrderTemplate
{
public abstract void SelectProduct();
public abstract void Payment();
public abstract void Deliver();
public void ProcessOrder()
{
SelectProduct();
Payment();
Deliver();
}
}
//concrete classe
public class OnLineOrder : OrderTemplate
{
public override void Deliver()
{
Console.WriteLine("Product shipped via courier");
}
public override void Payment()
{
Console.WriteLine("Online payment done successfully");
}
public override void SelectProduct()
{
Console.WriteLine("Product added to cart successfully");
}
}
//concrete class
public class StoreOrder : OrderTemplate
{
public override void Deliver()
{
Console.WriteLine("Product delivered to customer at counter");
}
public override void Payment()
{
Console.WriteLine("Paid at counter");
}
public override void SelectProduct()
{
Console.WriteLine("Product is selected by customer from rack in store");
}
}
class Program
{
//entry point
static void Main(string[] args)
{
Console.WriteLine("----------- Online Order Process -----------");
OrderTemplate onlineOrder = new OnLineOrder();
onlineOrder.ProcessOrder();
Console.WriteLine("----------- Retail Store Order Process -----------");
OrderTemplate storeOrder = new StoreOrder();
storeOrder.ProcessOrder();
Console.Read();
}
}
}
@miteshsureja
Copy link
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment