策略模式【java版】
2011-12-25 16:35
197 查看
一、基本结构
组成:
a)策略接口:1个
b)具体策略类:多个,封装了具体的算法和行为
c)调度类: 1个,持有某具体策略类的引用,供客户端使用
策略接口:
具体策略类一:
具体策略类二:
调度类:
说明: 如何体现“对扩展开放,对修改封闭”?
当有新的具体策略需要添加时,只需要定义一个新的“具体策略类”,整个结构中,无需做任何修改。
二、测试
测试代码:
运行结果:
三、策略模式与简单工厂模式对比:
简单工厂模式:根据不同的情况,创建不同的对象,对象之间类型差别较大,
有可能各个类的方法名和个数差别很大
注重不同对象的创建:根据不同的情况创建不同的对象(eg:下单,查资金等)
策略模式:根据不同的情况,创建不同的对象.对象不同类型相近,方法差别大. 尤其适合经
常变动的多种不同算法。 一般用于多个类的方法名都相同,但是实现方式不同
注重多个对象的相同行为:屏蔽方法名相同,算法实现细节不同之间的差异
(eg:txt、xml、dat、access四种格式的数据操作,读取,删除,修改)
组成:
a)策略接口:1个
b)具体策略类:多个,封装了具体的算法和行为
c)调度类: 1个,持有某具体策略类的引用,供客户端使用
策略接口:
//策略接口,定义了不同策略供外部调用的“通用方法” public interface StrategyInterface { public void multiWay_tour(); }
具体策略类一:
public class FirstConcreteStrategy implements StrategyInterface { public void multiWay_tour() {//策略方法的具体实现 System.out.println("I'll go tourism on feet!"); } }
具体策略类二:
public class SecondConcreteStrategy implements StrategyInterface { public void multiWay_tour() {//策略方法的具体实现 System.out.println("I'll go tourism by train!"); } }
调度类:
public class Context { private StrategyInterface strategyInterface; //调度类,根据传进来的具体策略对象的引用,调用其对应的方法 public Context(StrategyInterface strategyInterface) { this.strategyInterface=strategyInterface; } public void multiWay_tour(){ this.strategyInterface.multiWay_tour(); } }
说明: 如何体现“对扩展开放,对修改封闭”?
当有新的具体策略需要添加时,只需要定义一个新的“具体策略类”,整个结构中,无需做任何修改。
二、测试
测试代码:
public class Main { public static void main(String[] args) { System.out.println("开始测试策略模式。。。"); //定义多个调度类对象 Context firstContext=new Context(new FirstConcreteStrategy()); Context secondContext=new Context(new SecondConcreteStrategy()); //调用“通用方法”,只通过“调度类”实现,算法之间的差异已被屏蔽 firstContext.multiWay_tour(); secondContext.multiWay_tour(); } }
运行结果:
三、策略模式与简单工厂模式对比:
简单工厂模式:根据不同的情况,创建不同的对象,对象之间类型差别较大,
有可能各个类的方法名和个数差别很大
注重不同对象的创建:根据不同的情况创建不同的对象(eg:下单,查资金等)
策略模式:根据不同的情况,创建不同的对象.对象不同类型相近,方法差别大. 尤其适合经
常变动的多种不同算法。 一般用于多个类的方法名都相同,但是实现方式不同
注重多个对象的相同行为:屏蔽方法名相同,算法实现细节不同之间的差异
(eg:txt、xml、dat、access四种格式的数据操作,读取,删除,修改)
相关文章推荐
- Java设计模式之策略模式与状态模式
- java设计模式-策略模式
- java设计模式【全】-策略模式
- [置顶] 简述23种java设计模式之策略模式(strategy)
- java中简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- java设计模式之——策略模式
- Java 设计模式(九) Strategy(策略)模式及Spring引申
- Java设计模式之策略模式(Strategy模式)介绍
- 策略模式--Java篇
- JAVA设计模式--策略模式
- Java设计模式:策略模式 Strategy
- Java设计模式之策略模式
- java 策略(Strategy)模式
- java设计模式-策略模式
- Java设计模式之九(策略模式)
- java设计模式--策略模式
- 0099 Java设计模式--策略模式Context的必要性【进阶】
- java设计模式--行为型模式--策略模式
- Java设计模式之策略模式