java策略模式的详解

Java模式之策略模式

    策略模式(Strategy Pattern)体现了两个非常基本的面向对象设计的原则

      1、封装变化的概念;

      2、编程中使用接口,而不是对接口的实现。

  策略模式定义了一个共同的抽象算法接口,其子类实现这个接口定义的方法,并且都有各自不同的实现,这些算法实现可以在客户端调用它们的时候互不影响的变化。   子算法之间是弱连接的关系,提高了软件的可扩展性与可重用性。

 策略模式组成

   1、抽象策略角色:策略类,通常由一个接口或者抽象类实现

   2、具体策略角色:包括了相关的算法和行为,可能不止一个具体策略角色

   3、环境角色:持有一个策略类的引用,最终给客户端调用的。

策略模式编写步骤

  1、对一组算法抽象出一个共同接口,定义这个共同接口

  2、编写策略类,实现这个借口,每个策略类都有其独特的实现

  3、编写环境角色类,类中持有一个对共同接口的引用,对策略对象注入如set方法和get方法或者用构造方法完成赋值

例子:


  1. //一个算法接口  
  2. public interface Calculate {  
  3. //一个待实现方法  
  4.     int calculate(int a, int b);  
  5. }  
  6.   
  7. //一个加法策略类,实现算法接口  
  8. public class AddCalculate implements Calculate  
  9. {  
  10. //接口方法具体实现之加法  
  11.     public int calculate(int a, int b)  
  12.     {  
  13.         return a + b;  
  14.     }  
  15. }  
  16. //一个除法策略类,实现算法接口  
  17. public class DivideCalculate implements Calculate  
  18. {  
  19. 接口方法具体实现之除法  
  20.     public int calculate(int a, int b)  
  21.     {  
  22.         return a / b;  
  23.     }  
  24. }  
  25. //一个环境角色类,持有对接口的引用  
  26. public class Environment  
  27. {  
  28.     private Calculate cal;  
  29.       
  30. //构造方法对变量完成赋值  
  31.     public Environment(Calculate cal)  
  32.     {  
  33.         this.cal = cal;  
  34.     }  
  35.   
  36. //获得策略类对象  
  37.     public Calculate getCalculate()  
  38.     {  
  39.         return cal;  
  40.     }  
  41. //用set方法注入策略对象  
  42.     public void setCalculate(Calculate cal)  
  43.     {  
  44.         this.cal = cal;  
  45.     }  
  46. //环境角色中的接口方法,其具体结果依赖于策略引用指向的具体策略角色对象  
  47.     public int calculate(int a ,int b)  
  48.     {  
  49.         return cal.calculate(a , b);  
  50.     }  
  51. }  
  52. //一个客户端演示  
  53. public class Client  
  54. {  
  55.     public static void main(String[] args)  
  56.     {  
  57.         AddCalculate add = new AddCalculate();  
  58.   
  59.         Environment environment = new Environment(add);  
  60.   
  61.         System.out.println(environment.calculate(34));  
  62.   
  63.         DivideCalculate divide = new DivideCalculate();  
  64.   
  65.         Environment environment = new Environment(divide);  
  66.   
  67.         System.out.println(environment.calculate(34));  
  68.       
  69.     }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值