java设计模式之策略模式

来源:互联网 发布:树莓派gpio python 编辑:程序博客网 时间:2024/05/19 00:51

java设计模式参考文章:
Java设计模式实战,23种设计模式介绍以及在Java中的实现,Java设计模式, Java经典设计模式之五大创建型模式


## 定义 ##

定义一系列算法,把他们一个个封装起来,并且使他们可相互替换。本模式使得算法可独立于其他客户端而变化。

## 代码示例 ##

/** * @author bwx * @date 2017/11/27 */public interface Strategy {    double acceptCash(double money);}/** * @author bwx * @date 2017/11/27 * 正常收费 */public class Normal implements Strategy {    public double acceptCash(double money) {        return money;    }}/** * @author bwx * @date 2017/11/27 * 打折收费 */public class Discount implements Strategy {    public double acceptCash(double money) {        return money * 0.8;    }}/** * @author bwx * @date 2017/11/27 * 减价收费 */public class Rebate implements Strategy {    public double acceptCash(double money) {        return money - 1;    }}/** * @author bwx * @date 2017/11/27 * 维护一个Strategy对象的引用; * 定义一个接口让Strategy访问它的数据; */public class Context {    private Strategy strategy;    public Context(Strategy strategy) {        this.strategy = strategy;    }    public double getMoney(double money) {        return strategy.acceptCash(money);    }}/** * @author bwx * @date 2017/11/27 * 策略模式 */public class Main {    public static void main(String[] args) {        double money = 1000;        Context context = new Context(new Normal());        System.out.println("原价: [" + context.getMoney(money) + "]");        context = new Context(new Rebate());        System.out.println("减价优惠: [" + context.getMoney(money) + "]");        context = new Context(new Discount());        System.out.println("折扣优惠: [" + context.getMoney(money) + "]");    }}

## 优点 ##

1)策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复。(2)使用策略模式可以避免使用多重条件(if-else)语句。多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。

## 缺点##

(1)客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。(2)由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观。

##解析##

策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。