首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

java设计方式之strategy(策略模式)和policy模式(泛化的strategy模式)

2012-10-16 
java设计模式之strategy(策略模式)和policy模式(泛化的strategy模式)strategy模式?定义:?运行时刻选择算法

java设计模式之strategy(策略模式)和policy模式(泛化的strategy模式)

strategy模式

?

定义:?运行时刻选择算法

?

表面上看起来,state模式和strategy模式是非常相似的,但既然他们分成两种不同的模式,就有一定的区别,用一句话来概括就是:

策略用来处理算法方式变化,而状态则是处理状态变化。

具体可以参考:http://blog.csdn.net/lwzcjd/archive/2009/05/19/4201828.aspx

?

下面举个strategy的例子:


?

view plain
  1. package?com.factory.commonality;??
  2. /**?
  3. ?*?strategy模式的应用。?
  4. ?*/??
  5. interface?Strategy?{??
  6. ????void?algorithmInterface();??
  7. }??
  8. class?ConcreteStrategyA?implements?Strategy?{??
  9. ????public?void?algorithmInterface()?{??
  10. ????????System.out.println("Called?ConcreteStrategyA.algorithmInterface()");??
  11. ????}??
  12. }??
  13. class?ConcreteStrategyB?implements?Strategy?{??
  14. ????public?void?algorithmInterface()?{??
  15. ????????System.out.println("Called?ConcreteStrategyB.algorithmInterface()");??
  16. ????}??
  17. }??
  18. class?ConcreteStrategyC?implements?Strategy?{??
  19. ????public?void?algorithmInterface()?{??
  20. ????????System.out.println("Called?ConcreteStrategyC.algorithmInterface()");??
  21. ????}??
  22. }??
  23. class?Context?{??
  24. ????Strategy?strategy;??
  25. ????public?Context(Strategy?strategy)?{??
  26. ????????this.strategy?=?strategy;??
  27. ????}??
  28. ????public?void?doAlgorithm()?{??
  29. ????????strategy.algorithmInterface();??
  30. ????}??
  31. }??
  32. public?class?StrategyPatternTest?{??
  33. ????public?static?void?main(String[]?args)?{??
  34. ????????Context?c1?=?new?Context(new?ConcreteStrategyA());??
  35. ????????c1.doAlgorithm();??
  36. ????????Context?c2?=?new?Context(new?ConcreteStrategyB());??
  37. ????????c2.doAlgorithm();??
  38. ????????Context?c3?=?new?Context(new?ConcreteStrategyC());??
  39. ????????c3.doAlgorithm();??
  40. ????}??
  41. }??

?

?

运行结果:

Called ConcreteStrategyA.algorithmInterface()
Called ConcreteStrategyB.algorithmInterface()
Called ConcreteStrategyC.algorithmInterface()

?

?

policy模式

尽管 GoF 说Policy 模式只是Strategy 模式的一个别名,但是他们给出的Strategy 模式的例子隐含的假定了strategy 对象只使用一个方法――也就是说假定你已经把可能变化的算法拆成了一段单独的代码。

?

其他人用Policy 模式来表示一个对象有多个方法的情况,对于不同的类,这些方法可能相互独立变化。相对于(Strategy 模式) 只能有一个方法而言,Policy 模式具有更大的灵活性。

?

例如,当某个产品需要被运送到不同国家的时候,与该产品相关的海运政策(shipping policy)可以被用来说明一些与运输有关的问题。这些问题可能包括运输方式,如何计算邮资或者运费,客户需求以及费用,特殊处理的费用等等。所有这些东西可能会互不相干的变化,而且很重要的一点是在运输过程中你可能会在不同地点(points)需要上述信息。

?

通常情况下,把Strategy 模式和Policy 模式区别开来是很有好处的,用Strategy 模式处理一个方法(变化)的情况,而用Policy 模式处理多个方法。java设计方式之strategy(策略模式)和policy模式(泛化的strategy模式)?java设计方式之strategy(策略模式)和policy模式(泛化的strategy模式)?java设计方式之strategy(策略模式)和policy模式(泛化的strategy模式)

热点排行