首先了解一下策略模式的定义,来源于百度百科:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
主要的含义是指将每一个方法封装起来,让调用方选择具体需要使用的方法。
首先定义一个场景,还是出门旅行,小明出门旅游,从A市到B市,有飞机、大巴和火车三种出行方式。
代码实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public abstract class Travel 2 { 3 public abstract void GetTravelType(); 4 } 5 6 public class Plane : Travel 7 { 8 public override void GetTravelType() 9 { 10 Console.WriteLine("Travel by Plane."); 11 } 12 } 13 14 public class Bus : Travel 15 { 16 public override void GetTravelType() 17 { 18 Console.WriteLine("Travel by Bus."); 19 } 20 } 21 22 public class Train : Travel 23 { 24 public override void GetTravelType() 25 { 26 Console.WriteLine("Travel by Train."); 27 } 28 }
调用方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static void Main(string[] args) 2 { 3 StrategyPattern strategy = new StrategyPattern(); 4 strategy.TravelType(new Plane()); 5 strategy.TravelType(new Bus()); 6 strategy.TravelType(new Train()); 7 }
分析一下实现方式,首先定义一个抽象的旅行类,类中有一个获得旅行方式的抽象方法,接下来只要定义具体的类,继承旅行的抽象类然后重写方法。在外层将具体的旅游类封装起来,为外层提供一个公开的方法即可。
使用策略模式,可以方便的修改每一个方法而不用担心会对其他方法造成影响,降低类与类之间的耦合。
一般来说策略模式会和工厂方法一同使用,外部调用时通过工厂模式实例化具体的类,然后通过策略模式获取最终的结果。
以上就是对策略模式的一些个人总结和看法,欢迎其他同学为文中个人观点提出批评。
作者:Mr.Gilgamash 出处:http://gamash.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载。
未经作者同意下,必须在文章页面明显标出原文链接及作者,否则保留追究法律责任的权利。
|