策略模式
Table of Contents

策略模式应该是一种很常用的设计模式了,使用了策略模式后,能显著地减少代码中if else的量。

什么是策略模式

定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
但其实除了算法,策略模式还可以用来封装任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

策略模式UML图

策略模式

商城优惠例子

优惠算法的父类

public abstract class CrashSuper {
    public abstract float figure(float money);
}

其中一个算法的实现,继承了优惠算法的父类,实现了算法。

public class NormalCrash extends CrashSuper{
    @Override
    public float figure(float money) {
        //do something here
        return money;
    }
}

Context类,用来组装需要的算法,并且提供对外调用算法接口。

public class CrashContext{
    private CrashSuper crashSuper;

    public CrashContext(CrashSuper crashSuper){
        this.crashSuper = crashSuper;
    }

    public float getFigureMoney(float money){
        return crashSuper.figure(money);
    }
}

工厂模式和策略模式的区别

1、工厂模式是创建型模式、而策略模式是行为性模式。
2、工厂模式是用来创建对象的,而策略模式是用来表示可替代的算法。