行为型模式之策略模式(Strategy)

策略模式对业务中的可替换部分进行了抽象,使得同一件事情可以使用不同的处理方式来完成。

策略模式通过预先定义一些策略,主逻辑在处理过程中可以自由选择哪种策略来完成。


使用策略模式,可以实现自由选择支付方式、自由选择计算方法、自由选择比较器等等,Java的比较器Comparator就是使用了策略模式,因此可以方便地切换不同的比较器进而完成不同的排序结果。


对比“状态模式,两者的相似之处在于都可以通过切换可变部分而表现出不同的行为,然却不尽相同:

状态模式旨在将具有依赖关系的“条件”的变化规则独立出来,这样,“条件”可独立于主体而自主变化,不同的“条件”可驱动出不同的主体行为,通常多个主体会共用一个状态;

策略模式旨在完成行为的替换,它通常不影响主体的行为,主体也不关心使用哪种策略,具体的工作在具体的策略中完成,通常一个主体在表现时需要指定具体使用哪种策略。

两者的主要区别在于其行为,状态模式,状态自身可变,行为自主完成,策略模式,自由选择行为,行为在策略中完成。


场景:到超市购物结帐,可选卡支付或现金支付。

分析:支付过程是必须进行的,但支付的方式可由多种,即可以使用不同的支付策略或支付政策,可以使用策略模式来完成。

设计:

示例代码:

package netty_ws;
interface PaymentStrategy {
    void pay(int price);
}
class CardStrategy implements PaymentStrategy {
    @Override
    public void pay(int price) {
        System.out.println("使用银行卡付款:" + price);
    }
}
class CashStrategy implements PaymentStrategy {
    @Override
    public void pay(int price) {
        System.out.println("使用现金支付:" + price);
    }
}
class Shopping {
    public void pay(int price, PaymentStrategy paymentStrategy) {
        paymentStrategy.pay(price);
    }
}
public class Test {
    public static void main(String[] args) {
        Shopping shopping = new Shopping();
        int price = 100;
        shopping.pay(price, new CardStrategy());
        shopping.pay(price, new CashStrategy());
    }
}

输出:

使用银行卡付款:100
使用现金支付:100


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值