zoukankan      html  css  js  c++  java
  • 《JAVA与模式》之策略模式

    策略模式的定义

      定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。

      策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。

    策略模式的组成

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

      具体策略角色:包装了相关的算法和行为。

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


    一个简单的例子

     1 public class Strategy {
     2     
     3     
     4     public static void main(String[] args) {
     5         
     6         IStrategy iStrategy =new StrategyB();
     7         Context context =new Context(iStrategy);
     8         context.doStrategy();
     9     }
    10 
    11 }
    12 
    13 
    14 
    15 class Context{
    16     
    17     private IStrategy iStrategy;
    18     
    19     public Context(IStrategy iStrategy){
    20         
    21         this.iStrategy=iStrategy;
    22     }
    23     
    24     
    25     public void doStrategy(){
    26         
    27         iStrategy.say();
    28         
    29     }
    30     
    31 }
    32 
    33 
    34 interface  IStrategy{
    35     
    36     public void say();
    37     
    38 }
    39 
    40 class StrategyA implements IStrategy{
    41 
    42     @Override
    43     public void say() {
    44         System.out.println("StrategyA");
    45     }
    46 }
    47 class StrategyB implements IStrategy{
    48     
    49     @Override
    50     public void say() {
    51         System.out.println("StrategyB");
    52     }
    53 }
    54 class StrategyC implements IStrategy{
    55     
    56     @Override
    57     public void say() {
    58         System.out.println("StrategyC");
    59     }
    60 }

    拓展联想:如何设计一个计算器 包含加减乘除四个策略

    策略模式的缺点:客户端必须知道有多少个可用策略,每一个策略都要创建一个对象,可使用工厂模式来解决

    策略模式与状态模式的区别

    1.状态模式之间的实现类是互斥的,而对策模式则是并行的

    2.策略模式是由客户端来控制具体使用哪个策略

      而状态模式是需要通过state或则context自身来做判断管理的

    策略模式配合工厂模式解决If else 过多的问题

     StateFactory.java
    
    static Map<String,Class> states = new HashMap<String,Class>();
    static{
       states.put("A",ConcreteStateA.class);
       states.put("B",ConcreteStateB.class);
    }
    
    public static State createState(String key){
        return (State)states.get(key).newInstance();
    }
    
    //调用
    StateFactory.createState(state).handle();  

    参考:

    http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html

    http://www.cnblogs.com/mengdd/archive/2013/01/19/2867443.html

    http://yangguangfu.iteye.com/blog/815107

    http://www.iteye.com/topic/1112645?page=1

  • 相关阅读:
    lambda 和 iterable
    使用Jenkins部署Python项目
    python下selenium自动化测试自我实践
    【其它】数学学科编码
    【其它】音阶中的数学
    【数理统计基础】 06
    【数理统计基础】 05
    【数理统计基础】 04
    【数理统计基础】 03
    【数理统计基础】 02
  • 原文地址:https://www.cnblogs.com/draem0507/p/3784922.html
Copyright © 2011-2022 走看看