设计模式学习笔记之策略模式(Java实现)
2013-04-21 00:00
411 查看
package pattern_test.strategy_pattern; /** * 策略接口,也可以叫做算法的抽象 * @author glogo * */ public interface Strategy { /** 算法内容,从一组数据中挑出一个*/ int pickUp(int...data); }
package pattern_test.strategy_pattern; /** * Context接口 * @author glogo */ public interface Context { /** 注入策略对象*/ Context setStrategy(Strategy strategy); /** 从一组数据中查找*/ int find(int...data); //int...data 可变参数列表 //调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数 }
package pattern_test.strategy_pattern; /** * 决策者 * @author glogo * */ public class Selector implements Context{ private Strategy strategy; @Override public Context setStrategy(Strategy strategy) { this.strategy = strategy; return this; } @Override public int find(int... data) { return strategy.pickUp(data); //这里涉及到向下转型 } }
package pattern_test.strategy_pattern; /** * 具体策略的实现者 * @author glogo * */ public class GetMaxStrategy implements Strategy{ @Override public int pickUp(int... data) { int min = data[0]; for(int i = 1; i <data.length; i++) if(min>data[i]) min=data[i]; return min; } }
package test; import static org.junit.Assert.*; import org.junit.Test; import pattern_test.strategy_pattern.Context; import pattern_test.strategy_pattern.GetMaxStrategy; import pattern_test.strategy_pattern.Selector; /** * 测试 * @author glogo * */ public class GetMaxStrategyTest { int[] data = new int[]{5,3,7,9,1}; @Test public void test() { Context context = new Selector(); //向上转型 assertEquals(1, context.setStrategy(new GetMaxStrategy()).find(data)); } }
简而言之就是算法的“我”做策划,“你”来决策!
关键要素:算法的抽象、不同策略的实现、决策者
代码来源于书本
相关文章推荐
- 学习笔记——JAVA设计模式<18>策略模式
- 【Java23种设计模式学习笔记】一:策略模式
- 设计模式学习笔记之单例模式(Java实现)
- Java-马士兵设计模式学习笔记-策略模式-模拟Comparable接口
- java学习笔记-设计模式14(策略模式)
- 设计模式学习笔记---策略模式strategy pattern(Java版)
- java设计模式学习笔记5 适配器模式几种实现方式
- Java-马士兵设计模式学习笔记-策略模式-模拟 Comparator接口
- java设计模式学习笔记之策略模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- java 设计模式 学习笔记(4) 策略模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- java/android 设计模式学习笔记(17)---策略模式
- 设计模式学习笔记以及java代码实现
- 设计模式学习笔记一 简单工厂策略模式实现销售策略的变更(一)
- 设计模式之策略模式——极客学院学习笔记
- java 设计模式 学习笔记 (2) - 工厂方法模式
- [JAVA学习笔记-97]ActiveObject模式的Scheduler的关键实现
- [学习笔记]Java模板方法和单例设计模式
- Java-马士兵设计模式学习笔记-工厂模式-简单工厂