策略模式设计模式(详细,易懂)

本文介绍了策略模式的概念,包括其在Java中的实现,如抽象策略接口、策略实现类(如支付宝和银联支付)以及环境上下文。讨论了策略模式如何避免多重条件判断并提高代码扩展性,同时也提及了其可能的维护挑战。
摘要由CSDN通过智能技术生成

策略模式

定义

策略模式基于Java接口来实现,是一种行为模式。
将对象和行为分开,将行为定义为一个行为接口和具体的行为实现(说白了策略模式就是用来解决多个if判断的情况的)。

结构

抽象策略接口(Strategy):策略是一个接口,定义若干抽象方法。
策略实现类(Concrete Strategy):实现抽象策略接口,提供具体实现。
环境上下文(Context):持有一个策略类的引用,最终给到客户端引用。

优缺点

优点:算法可以自由切换,避免使用多重条件判断,扩展性很好。
缺点:后面维护不同策略类会非常多,代码量比较大。

代码实践

例子:电商网站支付方式,一般分为银联、微信、支付宝,可以采用策略模式。

抽象策略接口
/**
 * 策略模式基于Java接口实现
 * 支付策略接口
 */
public interface PayStartegy {

    String toPay();
}
策略实现类
/**
 * 支付宝支付策略实现
 */
public class AliPayStartegy implements PayStartegy {
    @Override
    public String toPay() {
        return "支付宝支付。。。";
    }
}

/**
 * 银联支付策略实现
 */
public class UnionPayStartegy implements PayStartegy {
    @Override
    public String toPay() {
        return "银联支付。。。";
    }
}
策略环境上下文
/**
 * 策略上下文/环境类
 * 负责和具体策略类交互
 * 这样的话,具体的算法和直接客户端调用分离了,使得算法可以独立于客户端独立变化。
 */
public class PayStartegyContext {

    private PayStartegy payStartegy;

    public PayStartegyContext(PayStartegy payStartegy) {
        this.payStartegy = payStartegy;
    }

    public String toPay(){
        return payStartegy.toPay();
    }

    public static void main(String[] args) {
        AliPayStartegy aliPayStartegy = new AliPayStartegy();
        UnionPayStartegy unionPayStartegy = new UnionPayStartegy();

        PayStartegyContext payStartegyContext = new PayStartegyContext(aliPayStartegy);
        PayStartegyContext payStartegyContext1 = new PayStartegyContext(unionPayStartegy);

        System.out.println(payStartegyContext.toPay());
        System.out.println(payStartegyContext1.toPay());
    }
}

image.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值