策略模式
来源:互联网 发布:jquery.min.js 使用 编辑:程序博客网 时间:2024/06/05 03:55
策略模式:它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户;
接着上面可乐的话题说下去吧,现在小乙开了个冷饮店,可以选择三种可乐,在最初阶段,他不熟悉经常来得客户的口味,所以每次客户来都得先说需要什么可乐,小乙然后将可乐送出,下面看看这个过程的实现代码:
/// <summary> /// 可乐基类 /// </summary> public class Cola { public virtual string KeLe() { return "I'm KeLe"; } } /// <summary> /// 可乐工厂类 /// </summary> public static class ColaFactroy { public static Cola GetCola(string custem) { switch (custem) { case "A": return new BaiShi(); case "B": return new KeKou(); default: return new FeiChang(); } } } /// <summary> /// 可口可乐 /// </summary> public class KeKou : Cola { public override string KeLe() { return "I'm KeKouKeLe"; } } /// <summary> /// 可口可乐 /// </summary> public class BaiShi : Cola { public override string KeLe() { return "I'm BaiShiKeLe"; } } /// <summary> /// 非常可乐 /// </summary> public class FeiChang : Cola { public override string KeLe() { return "I'm FeiChangKeLe"; } }小乙卖可乐的实现如下:1.A顾客前来买可乐:Cola cola = ColaFactroy.GetCola("A");cola.KeLe();2.B顾客前来买可乐:Cola cola = ColaFactroy.GetCola("B");cola.KeLe();
通过上面的代码可以看到,其实上面就是一个简单的工厂模式,小乙让用户直接对可乐工厂输入自己的爱好,可乐工厂将可乐做好后送出来;过了一阵子,顾客不高兴了,为什么?每次来买可都是对着可乐工厂说话,没看到老板小乙,顾客当然不高兴了,小乙想:通过什么样的策略来满足客户的需求呢?
实际最好的情况应该是:小乙看到A或B客户走过来,通过对A和B的习惯分别制定不同的销售策略,满足客户的需求,看看下面的代码:
/// <summary> /// 可乐基类 /// </summary> public class Cola { public virtual string KeLe() { return "I'm KeLe"; } }/// <summary> /// 老板小乙 /// </summary> public class XiaoYi { private Cola _cola; public XiaoYi(Cola cola) { this._cola = cola; } public String GetCola() { return _cola.KeLe(); } } /// <summary> /// 可口可乐 /// </summary> public class KeKou : Cola { public override string KeLe() { return "I'm KeKouKeLe"; } } /// <summary> /// 可口可乐 /// </summary> public class BaiShi : Cola { public override string KeLe() { return "I'm BaiShiKeLe"; } } /// <summary> /// 非常可乐 /// </summary> public class FeiChang : Cola { public override string KeLe() { return "I'm FeiChangKeLe"; }}
现在客户走过来之后,拿到可乐的代码应该是像下面这样的:
1. 小乙看到A客户走过来,因为熟悉A喜欢那种可乐,所以小乙马上开始准备:
XiaoYi xiaoyi = new XiaoYi(new BaiShi());
this.label1.Text = xiaoyi.GetCola();
通过对简单工厂模式和策略模式的比较,我们可以看到:简单工厂模式是通过类的多态性,通过工厂直接返回子类,在客户端访问子类的属性或方法;
策略模式是通过对子类的封装,在客户端进行子类的实例化后作为参数传入策略类,对策略类进行实例化,由策略类返回客户端需要的计算结果;
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 探秘Visual Studio.Net 2003
- 内核配置选项之CONFIG_AEABI
- html5_canvas_2
- Spring 上下文工厂类
- 黑马程序员_java面试总结
- 策略模式
- ruby中类的写法以及属性,实例变量,类方法的用法
- 每种创伤,都是另一种成熟
- STL系列之五 priority_queue 优先级队列
- 通用分页存储过程
- 以小见大、由浅入深-谈如何面试Javascript工程师
- linux驱动编程实践之LED驱动
- Apache与Tomcat的区别
- flash builder中SKINCLASS绑定自定义组件属性方法