设计模式:策略模式(转)

原文出处: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.生成许多的策略类。

转载于:https://www.cnblogs.com/m3Lee/p/3992721.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值