zoukankan      html  css  js  c++  java
  • 设计模式:策略模式(转)

    原文出处:http://www.cnblogs.com/li-peng/archive/2013/02/18/2915594.html

    注:为了方便自己日后查阅,把原文做了些许改动。

    一、概念部分,改为参考Thinking in java 4rd

    二、代码部分,改为java例子。

    =======================================================================

    策略模式:创建一个能够根据所传递的参数对象的不同而具有不同行为的方法。

              这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分。“策略”就是传递进去的参数对象,它包含要执行的代码。(参考thinking in java 4rd)

    定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

    换句话说策略模式,是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如吃东西的行为,有的人喜欢狼吞虎咽,有的人

    喜欢细嚼慢咽,有的人喜欢边吃边说

    策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

     看一下简单的代码实现

    package interfaces.classprocessor;
    
    import java.util.Arrays;
    
    class Processor{
        public String name(){
            return getClass().getSimpleName();
        }
        Object process(Object input){return input;}
    }
    class Upcase extends Processor{
        String process(Object input){return ((String)input).toUpperCase();}
    }
    class Downcase extends Processor{
        String process(Object input){return ((String)input).toLowerCase();}
    }
    class Splitter extends Processor{
        String process(Object input){return Arrays.toString(((String)input).split(" ")); }
    }
    
    public class Apply {
        public static void process(Processor p, Object s){
            System.out.println("Use Processor:"+p.name());
            System.out.println(p.process(s));
        }
        public static String s="Disgreement with beliefs is by definition incorrent";
        public static void main(String[] args){
            process(new Downcase(),s);
            process(new Upcase(),s);
            process(new Splitter(),s);
        }
    }

    输出:

    Use Processor:Downcase
    disgreement with beliefs is by definition incorrent
    Use Processor:Upcase
    DISGREEMENT WITH BELIEFS IS BY DEFINITION INCORRENT
    Use Processor:Splitter
    [Disgreement, with, beliefs, is, by, definition, incorrent]

    策略模式的优点: 
        1.提供了管理相关算法族的方法。 
        2.可以避免使用多重条件转移语句。 
        缺点: 
        3.必须知道所有的具体策略类及它们的区别. 
        4.生成许多的策略类。

  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/m3Lee/p/3992721.html
Copyright © 2011-2022 走看看