02 设计模式之策略模式

本文介绍了Java中的策略模式,如何通过定义策略接口、具体策略实现类和上下文对象来解耦支付业务中的算法,实现支付方式的灵活扩展。作者以支付模块为例,展示了如何使用策略模式提高代码的可维护性和可扩展性。
摘要由CSDN通过智能技术生成

策略模式的结构一般由三部分组成:

  • Strategy:策略接口,定义了一系列算法接口。

  • ConcreteStrategy:具体的策略实现类,负责具体的算法实现。

  • Context:上下文,持有具体的策略接口实现类,并根据客户端的算法选择,负责与具体策略实现类交互,执行相应的算法。

在这里插入图片描述

3 应用



对于文章开头提到的支付问题,不同的支付业务对应不同的算法,而使用这些算法的就是客户端,它们之间是耦合在一起的。所以我们需要将不同支付(算法实现)抽离出来,封装成一个个单独的支付类(算法类),同时定义一个算法公共接口,不同算法实现类都实现此接口。

以后要是增加新的支付方式,只需要增加一个新的算法实现类即可,也不会对其他算法实现类造成影响,达到了可扩展和可维护的效果。

首先定义策略接口,所有具体的策略实现类都要实现它。

package com.chenpi.strategy;

/**

  • @Description 策略接口

  • @Author 陈皮

  • @Date 2021/7/31

  • @Version 1.0

*/

public interface PayStrategy {

void pay(double money);

}

然后定义不同的具体策略实现类,并且实现策略接口。

package com.chenpi.strategy;

/**

  • @Description 支付宝支付策略实现类

  • @Author 陈皮

  • @Date 2021/7/31

  • @Version 1.0

*/

public class AliPayStrategy implements PayStrategy {

@Override

public void pay(double money) {

System.out.println(“使用支付宝支付金额:” + money);

}

}

package com.chenpi.strategy;

/**

  • @Description 微信支付策略实现类

  • @Author 陈皮

  • @Date 2021/7/31

  • @Version 1.0

*/

public class WeChatPayStrategy implements PayStrategy {

@Override

public void pay(double money) {

System.out.println(“使用微信支付金额:” + money);

}

}

package com.chenpi.strategy;

/**

  • @Description 银联支付策略实现类

  • @Author 陈皮

  • @Date 2021/7/31

  • @Version 1.0

*/

public class UnionPayStrategy implements PayStrategy {

@Override

public void pay(double money) {

System.out.println(“使用银联支付金额:” + money);

}

}

在策略模式中,为了让算法独立于使用算法的客户端,引入上下文对象,它持有具体的算法实现类,根据客户端选择具体的算法后,执行对应的具体算法。如此一来,算法的变化而不影响到客户端,客户端通过上下文对象还可以动态切换不同的算法。

package com.chenpi.strategy;

/**

  • @Description 上下文对象

  • @Author 陈皮

  • @Date 2021/7/31

  • @Version 1.0

*/

public class PayContext {

// 持有具体的策略实现类,一般由客户端决定设置

private PayStrategy payStrategy;

// 构造方法,接受一个具体的策略实现类

public PayContext(PayStrategy payStrategy) {

this.payStrategy = payStrategy;

}

// 暴露给客户端调用的方法,实现调用具体策略类的方法来实现

public void pay(double money) {

payStrategy.pay(money);

}

}

最后客户端就可以进行调用了。

package com.chenpi.strategy;

/**

  • @Description 策略模式

  • @Author 陈皮

  • @Date 2021/7/31

  • @Version 1.0

*/

public class ChenPiClient {

public static void main(String[] args) {

new PayContext(new AliPayStrategy()).pay(78.5);

}

}

//输出结果

使用支付宝支付金额:78.5

如果此时增加一种新的支付方式,信用卡支付,那么只需要新增一个策略实现类即可。

package com.chenpi.strategy;

/**

  • @Description 信用卡支付策略实现类

  • @Author 陈皮

  • @Date 2021/7/31

  • @Version 1.0

*/

public class CreditCardPayStrategy implements PayStrategy {

@Override

public void pay(double money) {

System.out.println(“使用信用卡支付金额:” + money);

}

}

支付模块的策略模式的结构关系如下图所示。

在这里插入图片描述

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
-Y6JvXJ1f-1714698236002)]

[外链图片转存中…(img-vgpgSECT-1714698236003)]

[外链图片转存中…(img-Af0oE62M-1714698236003)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值