策略模式(Stragety Pattern)
策略模式(Stragety Pattern)是一种对象行为模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是 “在美国交个人所得税” 和 “在中国交个人所得税” 就有不同的算税方法。策略模式提供了替代派生的子类,并定义类的每个行为,剔除了代码中条件的判断语句,使得扩展和结合新的行为变得更容易,根本不需要变动应用程序。策略模式可以避免使用多重条件转移语句,系统变得更新灵活。应用策略模式会产生很多子类,这符合高内聚的责任分配模式。文章来源:https://www.toymoban.com/news/detail-533580.html
文章来源地址https://www.toymoban.com/news/detail-533580.html
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();
}
}
}
到了这里,关于C#设计模式之---策略模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!