设计模式之策略模式
2015-06-01 15:11
357 查看
实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。
例如:超时收银员根据普通客户还是Vip客户来选择是否打折,类图由下所示
策略模式的优点有:
1. 将策略分开,每一种策略可以独立变化,而且提供了一个策略管理类,。
2. 提供继承的方式来封装算法,实现了动态的选择策略,分离了使用者的行为及算法策略。
3. 将每一种策略都封装好,通过环境类来选择使用哪种类,而不需要用分支语句来维护策略的选择。这样后期维护的时候非常的方便,健壮性更强。
策略模式的缺点有:
1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
2. 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,可以使用享元模式来减少对象的数量。
例如:超时收银员根据普通客户还是Vip客户来选择是否打折,类图由下所示
策略模式的优点有:
1. 将策略分开,每一种策略可以独立变化,而且提供了一个策略管理类,。
2. 提供继承的方式来封装算法,实现了动态的选择策略,分离了使用者的行为及算法策略。
3. 将每一种策略都封装好,通过环境类来选择使用哪种类,而不需要用分支语句来维护策略的选择。这样后期维护的时候非常的方便,健壮性更强。
策略模式的缺点有:
1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
2. 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,可以使用享元模式来减少对象的数量。
相关文章推荐
- Oracle学习(9):创建和管理表
- ngx_http_access_module语句中allow和deny语句
- YT02-简单数学课后题-1002 Delta-wave -(5.31日-烟台大学ACM预备队解题报告)
- XML解析
- 关于mybatis的一个bug问题
- VC6.0 OpenGL环境配置及编程基础
- Android Fragment 真正的完全解析(上)
- SQLServer2008 Hibernate配置及 在Maven中加入依赖
- Magento 优化
- 第十三周阅读程序5
- 世界上最棒的老爸
- linux下 C程序 参数和内存
- PHP笔记-变量
- Android应用在不同版本间兼容性处理
- NOI 2009 题解
- C语言结构体里的成员数组和指针
- C++ cin 输入检测——vector数组循环赋值
- [转]asp.net URL中包含中文参数造成乱码的解决方法
- Git 常用命令详解(二)
- +--*/--基本运算符