在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
策略模式主要解决程序中出现大量if else嵌套或case的情况,或未来有可能增加复杂场景的情况。
类似使用这种设计模式的还有很多,需要依需求情况而定。
策略模式的主要角色如下。
/**
* 支付选择器
* @author Administrator
*/
public interface ComparatorPay<T> {
/**
* 支付的金额
* @param money 金额
*/
void pay(T money);
}
/**
* 微信支付
* @author Administrator
*/
public class WinxinPayComparator implements ComparatorPay<Integer> {
/**
* 支付的金额
*
* @param money 金额
*/
@Override
public void pay(Integer money) {
// 这里写正常的业务逻辑
System.out.println("微信支付金额:"+money);
}
}
/**
* 支付宝支付
* @author Administrator
*/
public class ZhifubaoPayComparator implements ComparatorPay<Integer> {
/**
* 支付的金额
*
* @param money 金额
*/
@Override
public void pay(Integer money) {
// 这里写正常的业务逻辑
System.out.println("支付宝支付金额:"+money);
}
}
/**
* 策略控制类
* @author Administrator
*/
public class Context {
private ComparatorPay comparatorPay;
public Context(ComparatorPay comparatorPay) {
this.comparatorPay = comparatorPay;
}
public void pay(int money){
comparatorPay.pay(money);
}
}
/**
* 验证策略方式
* @author jieya
*/
public class Test {
public static void main(String[] args) {
// 微信支付
//Context context = new Context(new WinxinPayComparator());
// 支付宝支付
Context context = new Context(new ZhifubaoPayComparator());
context.pay(500);
}
}
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
原文:https://www.cnblogs.com/ajjava/p/14756702.html