策略模式应该是一种很常用的设计模式了,使用了策略模式后,能显著地减少代码中if else
的量。
定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
但其实除了算法,策略模式还可以用来封装任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
优惠算法的父类
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、工厂模式是用来创建对象的,而策略模式是用来表示可替代的算法。