【设计模式】策略模式 Strategy
2017-06-15 15:07
573 查看
策略模式
要素:1:策略的接口
2:策略接口的具体实现
3:策略的执行者(拥有策略接口的依赖)
简单描述:
1: 将功能需求定义在接口中,接口的实现类作为真正运行程序的策略。
2: 定义一个策略的执行类,执行类中应包含上面接口的依赖。 该类的默认构造器中将接口的实现注入到该类的元素中。
3:在执行类中定义,接口的功能方法(一般名字相同),该方法直接调用接口的方法(实际执行的是构造执行类时注入的接口实现类的方法)
其他:
1:接口的实现类(策略)可以任意增加,而不用修改执行类
2:在接口方法发生变化时,执行类也需要进行修改
简单例子:
package StrategyPattern; /** * @Title: DataScource.java * @Package StrategyPattern * @Description: 接口-定义策略的动作 * @author SUNF * @date 2017年6月15日 下午2:57:27 * */ public interface DataScource { String getDBName(); String getUrl(); }
package StrategyPattern; /** * @Title: Mysql.java * @Package StrategyPattern * @Description: 数据源第一个策略Mysql * @author SUNF * @date 2017年6月15日 下午2:57:08 * */ public class Mysql implements DataScource{ @Override public String getDBName() { return "mysql"; } @Override public String getUrl() { return "localhost:3306xxxxx"; } }
package StrategyPattern; /** * @Title: Oracle.java * @Package StrategyPattern * @Description: 数据源第一个策略Oracle * @author SUNF * @date 2017年6月15日 下午2:57:20 * */ public class Oracle implements DataScource{ @Override public String getDBName() { return "Oracle"; } @Override public String getUrl() { return "127.0.0.1:1521xxxxx"; } }
package StrategyPattern; /** * @Title: Context.java * @Package StrategyPattern * @Description: 执行类(也就是策略的执行者) * @author SUNF * @date 2017年6月15日 下午2:59:00 * */ public class Context { //数据源动作接口 private DataScource dataScource; //此时注入数据源 的实例 public Context(DataScource dataScource){ this.dataScource = dataScource; } /**以下下是策略的执行动作**/ public String getDBName() { return dataScource.getDBName(); } public String getUrl() { return dataScource.getUrl(); } }
package StrategyPattern; public class Test { public static void main(String[] args) { Context context = new Context(new Mysql()); System.out.println(context.getDBName()); Context context2 = new Context(new Oracle()); System.out.println(context2.getDBName()); System.out.println(context2.getUrl()); } }
运行结果:
mysql Oracle 127.0.0.1:1521xxxxx
相关文章推荐
- 设计模式随笔系列:鸭子-策略模式(Strategy)[原]
- 设计模式(18)-策略模式(Strategy)
- 设计模式之Strategy(策略)
- 设计模式解析(第二版)笔记4 Strategy 策略模式
- 设计模式(三)[策略(Strategy)模式]
- 设计模式之Strategy(策略)
- 学习设计模式之旅 / 策略模式 (Strategy) 推荐
- 设计模式学习1——策略模式(Strategy)
- Java设计模式-----Strategy策略模式
- 设计模式之策略模式(Strategy)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式与泡mm的关系之strategy策略模式及再思考
- 设计模式随笔系列:鸭子-策略模式(Strategy)
- 设计模式之Strategy(策略)
- 设计模式之策略模式(strategy)--游戏角色使用武器
- Head First 设计模式 C++实现-Strategy(策略模式)
- Head First 设计模式 C++实现-Strategy(策略模式)
- 设计模式(20)-策略模式(Strategy)