策略模式(行为型)

        策略模式是一种行为型的设计模式,指的是一个类的行为或者算法可以在运行时更改,也就相当于将一个类的行为或者算法封装起来,使其可以独立于客户而变化。

        例如加减乘除算法,我们只需要给计算器输入具体运算方法,计算器可以使用策略模式进行运算;再比如这么多的共享单车,如果有一个统一的容器,就可以不再单独下载App了,可以使用策略模式进行选择;再比如这么多的支付方式,我们只需要打开对应的支付方式,扫码一个容器二维码,就可以进行支付了。

        下面我们使用支付方式进行代码的演示。

        首先,我们有一个支付的接口:

public interface Pay{
    public void pay(Double amount);
}

        接着,我们建立4种支付的具体实现:

//支付宝支付的实现
public class AliPay implements Pay{
    @Override
    public void pay(Double amount){
        System.out.println("支付宝支付" + amount + "元!");
    }
}
//现金支付
public class CashPay implements Pay{
    @Override
    public void pay(Double amount){
        System.out.println("现金支付" + amount + "元!");
    }
}
//银联支付
public class UnionPay implements Pay{
    @Override
    public void pay(Double amount){
        System.out.println("银联支付" + amount + "元!");
    }
}
//微信支付
public class WeChatPay implements Pay{
    @Override
    public void pay(Double amount){
        System.out.println("微信支付" + amount + "元!");
    }
}

        接着,我们建立一个支付的容器:

public class PayContext{
    private Pay pay;

    public Pay setPay(Pay pay){
        this.pay = pay;
    }

    public void execute(Double amount){
        pay.pay(amount);
    }
}

        最后,我们测试一下支付:

public class PayTest{
    public static void main(String[] args){
        PayContext payContext = new PayContext();
   
        payContext.setPay(new AliPay());
        payContext.execute(10.01);
        
        payContext.setPay(new CashPay);
        payContext.execute(9.90);

        payContext.setPay(new UnionPay);
        payContext.execute(11.12);

        payContext.setPay(new WeChatPay);
        payContext.execute(0.01);
    }
}

        策略模式在Spring中就有用到,Spring在实例化对象的时候,在SimpleInstantiationStrategy中有使用到。

        策略模式的化,算法或者行为可以自由切换,可以避免使用多重条件判断,扩展性很好;但是,相对而言,其策略类会增多,并且所有的策略类都需要对外暴露接口。

发布了165 篇原创文章 · 获赞 41 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/100688652