标签:
Strategy 策略模式(行为型模式)
动机(Motivation)
在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。
如何在运行时根据需要透明地更改算法?将算法与对象本身解耦,从而避免上述问题?
意图(Intent)
定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。该模式使得算法可以独立于使用它的客户而变化。——《设计模式》GoF
示例代码
enum CartType { A, B, C } class Cart { public void Process(CartType cartType) { if (cartType == CartType.A) { ProcessorA(); } else if (cartType == CartType.B) { ProcessorB(); } else if (cartType == CartType.C) { ProcessorC(); } } private void ProcessorA() { //... } private void ProcessorB() { //... } private void ProcessorC() { //... } }
使用策略模式后的代码:
public interface IProcessStrategy//表达算法抽象 { void Process(); } public class ProcessStragegyA : IProcessStrategy { public void Process() { //... } } public class ProcessStragegyB : IProcessStrategy { public void Process() { //... } } public class ProcessStragegyC : IProcessStrategy { public void Process() { //... } } class Cart { private IProcessStrategy processStrategy; public Cart(IProcessStrategy processStrategy) { this.processStrategy = processStrategy; } public void Somemethod1() { //... processStrategy.Process(); //... } public void Somemethod2() { //... processStrategy.Process(); //... } }
客户端调用:
static void Main(string[] args) { Cart cart=new Cart(new ProcessStragegyA());//这里可以通过配置来动态调用 cart.Somemethod1(); }
结构(Structure)
Strategy模式的几个要点
转载请注明出处:
作者:JesseLZJ
出处:http://jesselzj.cnblogs.com
标签:
原文地址:http://www.cnblogs.com/jesselzj/p/4775723.html