策略模式(Stragety Pattern)
策略模式(Stragety Pattern)是一种对象行为模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是 “在美国交个人所得税” 和 “在中国交个人所得税” 就有不同的算税方法。策略模式提供了替代派生的子类,并定义类的每个行为,剔除了代码中条件的判断语句,使得扩展和结合新的行为变得更容易,根本不需要变动应用程序。策略模式可以避免使用多重条件转移语句,系统变得更新灵活。应用策略模式会产生很多子类,这符合高内聚的责任分配模式。
using System;
using System.Collections.Generic;
namespace ConsoleApplication
{//一般每个接口或类都写在单独的.cs文件中//本示例为了执行查看方便才写在一起 public interface ITravelStrategy{void travelAlgorithm();}/***具体策略类(ConcreteStrategy)*1:乘坐飞机
*/class AirPlanelStrategy : ITravelStrategy{public void travelAlgorithm(){Console.WriteLine("AirPlanelStrategy:乘坐飞机");}}/***具体策略类(ConcreteStrategy)*2:乘坐火车
*/class TrainStrategy : ITravelStrategy{public void travelAlgorithm(){Console.WriteLine("TrainStrategy:乘坐火车");}}/***具体策略类(ConcreteStrategy)*3:骑自行车
*/class BicycleStrategy : ITravelStrategy{public void travelAlgorithm(){Console.WriteLine("BicycleStrategy:骑自行车");}}/****环境类(Context):*用一个ConcreteStrategy对象来配置。*维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。*算法解决类,以提供客户选择使用何种解决方案:
*/class PersonContext{private ITravelStrategy travelStrategy = null;public PersonContext(ITravelStrategy travel){this.travelStrategy = travel;}/***旅行*/public void SetTravelStrategy(ITravelStrategy travel){this.travelStrategy = travel;}/***旅行*/public void travel(){travelStrategy.travelAlgorithm();}}class Program{static void Main(string[] args){//乘坐火车旅行var person = new PersonContext(new TrainStrategy());person.travel();//改骑自行车person.SetTravelStrategy(new BicycleStrategy());person.travel();Console.ReadKey();}}
}