abstract class OperationTemplate
public double TemplateMethod(double operand1, double operand2)
ValidateOperands(operand1, operand2);
double result = PerformOperation(operand1, operand2);
protected abstract void ValidateOperands(double operand1, double operand2);
protected abstract double PerformOperation(double operand1, double operand2);
protected abstract void DisplayResult(double result);
class AdditionOperation : OperationTemplate
protected override void ValidateOperands(double operand1, double operand2)
protected override double PerformOperation(double operand1, double operand2)
return operand1 + operand2;
protected override void DisplayResult(double result)
Console.WriteLine("Result of addition: " + result);
class SubtractionOperation : OperationTemplate
protected override void ValidateOperands(double operand1, double operand2)
protected override double PerformOperation(double operand1, double operand2)
return operand1 - operand2;
protected override void DisplayResult(double result)
Console.WriteLine("Result of subtraction: " + result);
class MultiplicationOperation : OperationTemplate
protected override void ValidateOperands(double operand1, double operand2)
protected override double PerformOperation(double operand1, double operand2)
return operand1 * operand2;
protected override void DisplayResult(double result)
Console.WriteLine("Result of multiplication: " + result);
class DivisionOperation : OperationTemplate
protected override void ValidateOperands(double operand1, double operand2)
throw new DivideByZeroException("Cannot divide by zero");
protected override double PerformOperation(double operand1, double operand2)
return operand1 / operand2;
protected override void DisplayResult(double result)
Console.WriteLine("Result of division: " + result);
static void Main(string[] args)
OperationTemplate operation = new AdditionOperation();
operation.TemplateMethod(5, 3);
operation = new SubtractionOperation();
operation.TemplateMethod(10, 4);
operation = new MultiplicationOperation();
operation.TemplateMethod(6, 2);
operation = new DivisionOperation();
operation.TemplateMethod(8, 2);