策略模式,可以理解为做一件事情的不同的方法,不同的算法,比如说今天您去商店(超市)买物品,这个时候您有多种付款方式,您可以选择使用支付宝支付或者是微信支付,如果可能的话也有可能用上 paypal 支付。
策略模式,就是一个接口把方法定义出来,然后不同的类去实现接口中的这个方法,每个类的方法中的算法都不大一样,而且在使用的过程中,我们可以自由的相互替换不同的策略。
在这里,先定义一个支付的接口,然后不同的三个子类去实现,分别是 Alipay , Wechatpay ,和 Paypal,代码如下:
interface Pay{
public void doPay();
}
class Alipay implements Pay{
@Override
public void doPay() {
System.out.println("使用alipay");
}
}
class Wechatpay implements Pay{
@Override
public void doPay() {
System.out.println("使用wechatpay");
}
}
class Paypal implements Pay{
@Override
public void doPay() {
System.out.println("使用Paypal");
}
}
定义好了接口和其实现类,支付方式之后,我们写一个模板来完成支付的操作。
//定义一个完成支付的模板
class PayTemplate{
private Pay pay;
//传入进来一种支付方式
public PayTemplate(Pay pay) {
super();
this.pay = pay;
}
public void doMyJob(){
pay.doPay();
}
}
写主函数测试这个支付模板:
public class MyStrategy {
public static void main(String[] args) {
PayTemplate pt = new PayTemplate( new Wechatpay() );
pt.doMyJob();
}
}
可以在程序中替换 new PayTemplate构造方法的传入参数,从而控制使用哪一种方式进行支付操作。
上面使用的Wechatpay,输出结果如下图: