策略模式是一种定义一些类算法的方法,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法与使用算法类之间的耦合!
我理解的策略模式就是把它比作一个大型的工厂,里面有很多的部门,每个部门都有不同的功能,但是这些部件组合到一起才能让工厂达到最高的生产收益!但是每个部门之间也有相同之处和不同之处,它们的工作基本上都是相同的,但是方法是不同的。
下面我举个自己写的小例子,欢迎大家吐槽:
就拿汽车来说,汽车就相当于一个大型的工厂,汽车的离合,油门,刹车,档,方向盘........各个方面的部件都是配合让汽车完成各种动作的,它们的工作最终目的都是让车行驶条件。
abstract class drive
{
//定义一个行驶的方法
public abstract void driving();
}
每个汽车上的部件都能完成不同的功能
class advance:drive
{
public override void driving()
{
Console .WriteLine ("前进");
}
}
class back_car : drive
{
public override void driving()
{
Console.WriteLine("倒车");
}
}
class expedite : drive
{
public override void driving()
{
Console.WriteLine("加速");
}
}
可是问题出现了,有这么多功能,我们不能每次想到想到什么功能就把所有的方法都写一遍吧,这样既加大了我们的工作量,而且出错率也会很高,策略模式就很好的解决了这个问题,把所有的方法都封装到一起,想用什么方法就直接调用就行了,而且每个方法之间不会相互影响。
class car
{
drive driving;
public car(drive driving)
{
this.drive = driving;
}
//上下文接口
public void control_car()
{
drive.driving();
}
}
客户端代码:
class people
{
static void Main(string[] args)
{
car car;
car = new car(new back_car());
car.control();
car car;
car = new car(new expedite ());
car.control();
car car;
car = new car(new advance ());
car.control();
Console.Read();
}
}
总结:
策略模式的有点是在保证算法没有错误时,修改其中一个算法可以不影响其他的算法的正常使用,如果要用到这个算法的时候直接调用就行,增加或者删除算法都很方便,就像汽车上的刹车,倒车档,前进挡,油门,它们都可以看成不同的算法,每个算法的功能是不一样的,但是当我使用其中任何一个是不会影响其他的使用!
总觉得自己的理解还不是很到位,敲过一遍书上的例子,感觉自己的收获很少,看过之前很多人总结这块的博客,互相学习了下,觉得还是自己举一个例子来理解是最好的,可能有点牵强,欢迎大家指点批评!