Comments
Concrete classes of the same interface are created as object and declared as the interface. The object type defines which concrete implementations are used when they are called shortly afterwards.
Code
namespace IVSR.Designpattern.Strategy { //The interface for the strategies public interface ICalculate { int Calculate(int value1, int value2); } //strategies //Strategy 1: Minus class Minus : ICalculate { public int Calculate(int value1, int value2) { return value1 - value2; } } //Strategy 2: Plus class Plus : ICalculate { public int Calculate(int value1, int value2) { return value1 + value2; } } //The client class CalculateClient { private ICalculate calculateStrategy; //Constructor: assigns strategy to interface public CalculateClient(ICalculate strategy) { this.calculateStrategy = strategy; } //Executes the strategy public int Calculate(int value1, int value2) { return calculateStrategy.Calculate(value1, value2); } } //Initialize protected void Page_Load(object sender, EventArgs e) { CalculateClient minusClient = new CalculateClient(new Minus()); Response.Write("
Minus: " + minusClient.Calculate(7, 1).ToString()); CalculateClient plusClient = new CalculateClient(new Plus()); Response.Write("
Plus: " + plusClient.Calculate(7, 1).ToString()); } }