设计模式(21)--策略模式
来源:互联网 发布:淘宝店铺怎么发布微淘 编辑:程序博客网 时间:2024/06/06 08:55
策略模式即解决问题的策略。当我们需要解决某个问题时,可能会有多种解决问题的办法,这时候,可以将每个办法看成一个策略,我们可以选择其中一个合适策略来解决问题。同时,我们可以方便的更换策略或者增加策略。
策略模式比较容易理解,该模式通过增加一个抽象策略类来定义策略角色。而我们面向抽象编程,使策略模式变得容易扩展。
举例:
小明去上学,可以走路,可以骑自行车,可以坐公交车,他的每一种去学校方式都可以看作解决”去学校“这个问题的策略。去学校是目的,去学校方式是过程,而策略模式所带来的便利恰恰是为你在这个过程中提供多个选择。
策略模式很好的体现了一句外国名言:条条大路通罗马(All roads lead to Rome)
策略模式UML类图:
其实这副类图是我从上个状态模式类图上简单修改得到的,这也能看出,有时候我们其实类的结构类的关系是差不多的,但为了解决不同问题,我们人为给它赋予了模式名称。
示例代码:
环境类(使用策略的类):
/***** * 环境类 * @author wjw * */public class Context {private Strategy strategy;public Context(Strategy strategy){this.strategy = strategy;}/***** * 去学校方法 */public void gotoSchool(){System.out.println("小明--" + strategy.howToGetToSchool() + "--去学校!");}}
抽象策略类:
/******* * 抽象策略类 * @author wjw * */public abstract class Strategy {public abstract String howToGetToSchool();}
步行 骑车 公交车策略类:
/**** * 步行策略类 * @author wjw * */public class WalkStrategy extends Strategy{@Overridepublic String howToGetToSchool() {// TODO Auto-generated method stubreturn "步行";}}
/**** * 骑车策略类 * @author wjw * */public class RideStrategy extends Strategy{@Overridepublic String howToGetToSchool() {// TODO Auto-generated method stubreturn "骑自行车";}}
/**** * 公交策略类 * @author wjw * */public class BusStrategy extends Strategy{@Overridepublic String howToGetToSchool() {// TODO Auto-generated method stubreturn "公交车";}}
Main类:
public class Main {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {//利用反射,通过配置文件new具体策略对象Class strategyClazz = Class.forName(ReadProperties.readProperties("strategy_name"));Strategy strategy = (Strategy)strategyClazz.newInstance();Context context = new Context(strategy);context.gotoSchool();}}
运行结果:
小明--骑自行车--去学校!
说明:实例代码通过选择不同策略上学来讲解策略模式,通过反射,在运行期选择具体策略。该示例代码很好理解,主要是理解了策略模式的定义。
设计模式是一个润物细无声的东西,你没感觉用到他,可能你已经用了,因为人会不自觉的选择好的方法去解决问题,哪怕没学过设计模式,也许也能摸索出自己的设计模式。你感觉这设计模式用处不大,可能到真的用到,就可以解决大问题。
如有错误,欢迎指正
end
阅读全文
0 0
- 设计模式(21)------策略模式
- 设计模式(21)-策略模式
- 设计模式(21)--策略模式
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式:2)策略设计模式
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- 我个人理解的界面设计原则
- 树上战争 HDU-2545 【并查集】
- NDK的基础教程 二 c语言回调java语言
- dedecms栏目路由命名规则
- 大数据学习笔记:启动脚本分析,start-dfs.cmd与start-yarn.cmd
- 设计模式(21)--策略模式
- Android与H5交互
- 【Machine Learning】笔记:Train/Validation/Test Sets
- js实现页面显示时间
- 汉诺塔(三)
- 贝叶斯实现文本分类C++实现
- Linux_FTP
- leetcode String to Integer (atoi)
- 网卡DM9000驱动