我的理解:
策略模式就是将类中可能在今后存在变化的方法抽象出来(形成一个抽象的策略类或者接口),
今后不管方法如何变化,或者有多少种方法,都实现这个策略类或者接口就可以了
类要调用哪种方法,只需在运行时申明一下采用哪种方法就可以了。
PS:其实.net中的集合类的排序运算就是用的这种模式。
List.Sort (IComparer)
在Sort时,传入实现了IComparer接口的排序类就可以了。
class App
{
static void Main()
{
//假设这辆车我使用CarRunA的策略进行Run的动作
Car car1 = new Car(new CarRunA());
car1.Run();
//假设这辆车我使用CarRunB的策略进行Run的动作
Car car2 = new Car(new CarRunB());
car2.Run();
}
}//实例类,调用策略中的方法。具体方法在实例化时给出。
public class Car
{
CarRun _carRun;
public Car(CarRun carRun)
{
_carRun = carRun;
}
public void Run()
{
_carRun.Run();
}
}
//策略类,将方法抽象出来,以便可以扩充出多种方法,例如:CarRunA和CarRunB
public abstract class CarRun
{
protected abstract void Run();
}//实现策略类中的抽象方法。策略A
public class CarRunA : CarRun
{
public override void Run()
{
Console.WriteLine("CarRun by A");
}
}//实现策略类中的抽象方法。策略B
public class CarRunB : CarRun
{
public override void Run()
{
Console.WriteLine("CarRun by B");
}
}


浙公网安备 33010602011771号