Programming - Template Behavioral Design Pattern
Define the skeleton of an algorithm in an operation,
deferring some steps to subclasses. Template Method lets
subclasses redefine certain steps of an algorithm without
changing the algorithm's structure.
The classes and/or objects participating in this example are:
-
AbstractClass
and
-
defines abstract primitive operations that
concrete subclasses define to implement steps of an
algorithm
-
implements a template method defining the skeleton of
an algorithm. The template method calls primitive
operations as well as operations defined in
AbstractClass or those of other objects.
-
ConcreteClass
using
System;
namespace DoFactory.GangOfFour.Template.Structural
{
// MainApp test application
class MainApp
{
static void Main()
{
AbstractClass c;
c = new
ConcreteClassA();
c.TemplateMethod();
c = new
ConcreteClassB();
c.TemplateMethod();
// Wait for user
Console.Read();
}
}
// "AbstractClass"
abstract class AbstractClass
{
public abstract void
PrimitiveOperation1();
public abstract void
PrimitiveOperation2();
// The "Template method"
public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
Console.WriteLine("");
}
}
// "ConcreteClass"
class ConcreteClassA : AbstractClass
{
public override void
PrimitiveOperation1()
{
Console.WriteLine("ConcreteClassA.PrimitiveOperation1()");
}
public override void
PrimitiveOperation2()
{
Console.WriteLine("ConcreteClassA.PrimitiveOperation2()");
}
}
class ConcreteClassB : AbstractClass
{
public override void
PrimitiveOperation1()
{
Console.WriteLine("ConcreteClassB.PrimitiveOperation1()");
}
public override void
PrimitiveOperation2()
{
Console.WriteLine("ConcreteClassB.PrimitiveOperation2()");
}
}
}
Output expected:
ConcreteClassA.PrimitiveOperation1()
ConcreteClassA.PrimitiveOperation2()
and
and