策略模式--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、客户不知道算法要使用的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值