策略模式(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(); } } }