策略模式简介
策略模式在设计模式中属于对象行为型模式,它的意图是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。策略模式使得算法可独立于使用它的客户而变化。
策略模式的图解如下所示:
示例
本文通过一个简单的例子来向大家介绍C#如何使用策略模式。本文以出行这个行为举例,出行我们可以使用多种方式,比如自己开车、乘坐公交、骑自行车等。
1、定义策略接口
public interface ITravelStrategy { public void Print(); }
我们定义了一个出行策略接口,只定义了一个Print方法。
2、实现具体策略类
public class Car : ITravelStrategy { public void Print() { Console.WriteLine("乘坐汽车出行\r\n"); } } public class Bike : ITravelStrategy { public void Print() { Console.WriteLine("骑自行车出行\r\n"); } } public class Bus : ITravelStrategy { public void Print() { Console.WriteLine("乘坐公交出行\r\n"); } }
定义了三个具体策略类分别为Car、Bike与Bus,都实现了ITravelStrategy
接口,它们的实现是不同的。
3、实现上下文类
public class TravelContext { private ITravelStrategy _strategy; public TravelContext(ITravelStrategy strategy) { _strategy = strategy; } public void SetStrategy(ITravelStrategy strategy) { _strategy = strategy; } public void ExecuteStrategy() { _strategy.Print(); } }
该上下文类维护一个对ITravelStrategy
对象的引用,可以在构造函数中为其指定一个具体的策略类,它还提供了SetStrategy方法来改变策略,ExecuteStrategy方法来执行策略。
4、使用策略模式
static void Main(){// 创建上下文并设置初始策略TravelContext travelContext = new TravelContext(new Car());travelContext.ExecuteStrategy();// 切换策略为坐公交出行travelContext.SetStrategy(new Bus());travelContext.ExecuteStrategy();// 切换策略为骑自行车出行travelContext.SetStrategy(new Bike());travelContext.ExecuteStrategy();Console.ReadLine();}
运行结果:
该示例的图解如下所示:
总结
使用策略模式的步骤总结如下:
希望对你有所帮助。
Ref
1、《Head First 设计模式(中文版)》
2、《大话设计模式》
3、《设计模式:可复用面向对象软件的基础》
4、YouTube Strategy Pattern – Design Patterns in C#