设计模式之策略模式
2015-08-24 15:50
246 查看
策略模式(strategy):定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。
通俗的说,就是一个客户可能需要多种不同的算法(方法,要求等),但是是为了实现一个功能,比如都是为了商场促销,为了让这些算法类与使用算法类之间减少耦合,抽象出它们之间共有的功能,抽象为一个父类,然后使用一个类似工厂的类来管理这些类,也就是根据客户端的要求来实例化不同的类。
通俗的说,就是一个客户可能需要多种不同的算法(方法,要求等),但是是为了实现一个功能,比如都是为了商场促销,为了让这些算法类与使用算法类之间减少耦合,抽象出它们之间共有的功能,抽象为一个父类,然后使用一个类似工厂的类来管理这些类,也就是根据客户端的要求来实例化不同的类。
using System; namespace Strategy { class Program { static void Main(string[] args) { Context context; context = new Context(new ConcreteStrategyA()); context.ContextInterface(); context = new Context(new ConcreteStrategyB()); context.ContextInterface(); Console.ReadKey(); } } //定义所有支持的算法的公共接口(共同方法,以便统一调用) abstract class Strategy { public abstract void AlgorithmInterface(); } class ConcreteStrategyA : Strategy { public override void AlgorithmInterface() { Console.WriteLine("具体算法A实现"); } } class ConcreteStrategyB : Strategy { public override void AlgorithmInterface() { Console.WriteLine("具体算法B实现"); } } class Context { Strategy strategy; //初始化时传入具体的策略对象 public Context(Strategy strategy) { this.strategy = strategy; } //调用具体的方法 public void ContextInterface() { strategy.AlgorithmInterface(); } } }
相关文章推荐
- 修改TabBar的字体大小及选中后的颜色
- 空指针和void*指针
- [LeetCode] World Search(!!!!回溯&&char *代替string&&递归)
- 设置textField的placegolder的字体大小和字体颜色
- 获取签名公钥
- PHP字符串比较
- selenium 找元素的方法
- 单线程中fgets阻塞select/poll/epoll的解决方法
- Apache和php的关系
- Java Eclipse(mac)环境使用maven 加载spring,hibernate 及java的一些配置
- Rabbit Party
- tesseract单个汉字识别为两个字解决
- Codeforces 313B : Ilya and Queries
- NSUserDefaults
- 用标准C编写COM dll
- jquery+html5烂漫爱心表白动画代码分享
- Yii2中验证码的使用
- 【Loadrunner】初学Loadrunner——IP欺骗
- POJ 1273 网络流(EK,Dinic,ISAP)
- jsp直接读取mysql数据库内容