`
jtlyuan
  • 浏览: 65132 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

策略模式--Strategy

 
阅读更多


 策略模式的目的是定义一系列算法,把它们封装起来,并且使它们可以相互替换.
本模式使得算法可以独立于它的客户而变话.



 
  1. /**  
  2.  * 抽象策略(Strategy)角色  
  3.  * @author Salmon  
  4.  *  
  5.  */  
  6. public interface Strategy {   
  7.     public void algorithmInterface();   
  8. }   
  9.   
  10. /**  
  11.  * 具体策略(ConcreteStrategy)角色  
  12.  * @author Salmon  
  13.  *  
  14.  */  
  15. public class ConcreteStrategyA implements Strategy {   
  16.     public void algorithmInterface() {   
  17.         System.out.println("Called ConcreteStrategyA.algorithmInterface()");   
  18.     }   
  19. }   
  20.   
  21. /**  
  22.  * 具体策略(ConcreteStrategy)角色  
  23.  * @author Salmon  
  24.  *  
  25.  */  
  26. public class ConcreteStrategyB implements Strategy {   
  27.     public void algorithmInterface() {   
  28.         System.out.println("Called ConcreteStrategyB.algorithmInterface()");   
  29.     }   
  30. }   
  31.   
  32. /**  
  33.  * 具体策略(ConcreteStrategy)角色  
  34.  * @author Salmon  
  35.  *  
  36.  */  
  37. public class ConcreteStrategyC implements Strategy {   
  38.     public void algorithmInterface() {   
  39.         System.out.println("Called ConcreteStrategyC.algorithmInterface()");   
  40.     }   
  41. }   
  42.   
  43. /**  
  44.  * 环境(Context)角色  
  45.  * @author Salmon  
  46.  *  
  47.  */  
  48. public class Context {   
  49.     Strategy strategy;   
  50.   
  51.     public Context(Strategy strategy) {   
  52.         this.strategy = strategy;   
  53.     }   
  54.   
  55.     public void contextInterface() {   
  56.         strategy.algorithmInterface();   
  57.     }   
  58. }   
  59.   
  60. /**  
  61.  * 客户端代码  
  62.  * @author Salmon  
  63.  *   
  64.  */  
  65. public class Client {   
  66.     public static void Main(String[] args) {   
  67.         Context c = new Context(new ConcreteStrategyA());   
  68.         c.contextInterface();   
  69.   
  70.         Context d = new Context(new ConcreteStrategyB());   
  71.         d.contextInterface();   
  72.   
  73.         Context e = new Context(new ConcreteStrategyC());   
  74.         e.contextInterface();   
  75.     }   

 

 

应用场合:

1、多个类的分别只是在于行为的不同。

2、你需要对行为的算法做很多的变动。

3、客户不知道算法要使用的数据。

  • 大小: 9.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics