策略模式随笔
来源:互联网 发布:Servlet接收json gson 编辑:程序博客网 时间:2024/06/05 05:48
http://blog.csdn.net/littleadr
策略模式是通过将一系列算法分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。所有的算法都完成的是相同的工作,只是不同算法的实现方式不同,此模式可以让算法实用类以相同的方式调用不同的算法,降低了算法和算法实用类之间的耦合。
假如一个人(客户端,算法使用类),现在比较饿(需要解决的问题),所以要吃东西(算法基类)来消除饿的感觉,同样是吃东西,我们可以吃米饭(算法类1),吃馒头(算法类2),吃肉(算法类3)等等,来达到让我们不饿的目的,UML图如下:
代码实现如下:
//如何解决饿
public class Context
{
Strategy strategy;
public Context(Strategy strategy) //初始化时传入策略
{
this.strategy = strategy;
}
public void ContextInterface() //策略使用接口
{
strategy.AlgorithmInterface();
}
}
//算法基类
public abstract class Strategy
{
public abstract void AlgorithmInterface();
}
//吃肉算法
public class ConcreteStrategyC : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("吃肉");
}
}
//吃馒头算法
public class ConcreteStrategyB : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("吃馒头");
}
}
//吃米饭算法
public class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("吃米饭");
}
}
//客户端
class Program
{
static void Main(string[] args)
{
Console.WriteLine("饿了...");
Console.WriteLine("喜欢吃什么?");
string likeFood = Console.ReadLine().Trim();
Context context = null;
switch(likeFood)
{
case "rice":
context = new Context(new ConcreteStrategyA());
break;
case "bun":
context = new Context(new ConcreteStrategyB());
break;
case "meat":
context = new Context(new ConcreteStrategyC());
break;
}
if (null != context)
context.ContextInterface();
}
}
正如我们所看到的,当需要增加新的算法时,仍然需要修改原有代码。
- 策略模式随笔
- 设计模式随笔-策略模式
- 设计模式随笔-策略模式
- 设计模式随笔系列:鸭子-策略模式(Strategy)
- 设计模式随笔系列:鸭子-策略模式(Strategy)[转]
- 设计模式随笔系列:鸭子-策略模式(Strategy)[转]
- 设计模式随笔系列:鸭子-策略模式(Strategy)[转]
- 设计模式随笔系列:鸭子-策略模式(Strategy)
- 设计模式随笔系列:鸭子-策略模式(Strategy
- 设计模式随笔-策略模式与简单工厂的区别
- 设计模式随笔之策略模式(strategy)
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 异常
- 音视频封装格式(3):TS格式学习
- Spring+SpringMVC+myBatis环境搭建
- 代理模式
- 实例详解tomcat组件安装+Nginx反向代理tomcat+Apache使用mod_jk和mod_proxy反向代理和负载均衡
- 策略模式随笔
- java对象序列化
- HTTP协议
- 微信恢复工具 MMRecovery 犹如一朵青莲
- 深度学习-theano-windows -cuda-环境搭建
- 浅谈Java中的hashcode方法
- HDU 1036.Average is not Fast Enough!【精度及格式控制】【8月23】
- 例题9-8 颜色的长度 UVa1625
- HDU 4709 Herding(叉乘法)