首页 > 编程语言 >策略模式:整体替换算法

策略模式:整体替换算法

时间:2023-06-14 12:02:08浏览次数:37  
标签:PaymentStrategy 策略 pay 模式 替换算法 public amount PaymentContext

策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在策略模式中,我们定义了多个算法,并将每个算法封装在一个独立的类中(策略类),以便在运行时根据需要进行切换。这使得算法与调用其算法的客户端代码分离,从而实现了更高的灵活性和可维护性。

主要实现方式:1 策略接口 -> n * 具体策略实现类 -> 1 持有策略接口对象的上下文 -> 客户端调用上下文,传入所需的策略实现类对象

示例代码

// 定义策略接口
interface PaymentStrategy {
    void pay(double amount);
}

// 实现不同的策略
class CashPaymentStrategy implements PaymentStrategy {
    public void pay(double amount) {
        System.out.println("支付 " + amount + " 元现金");
    }
}

class CardPaymentStrategy implements PaymentStrategy {
    public void pay(double amount) {
        System.out.println("支付 " + amount + " 元信用卡");
    }
}

class PayPalPaymentStrategy implements PaymentStrategy {
    public void pay(double amount) {
        System.out.println("支付 " + amount + " 元 PayPal");
    }
}

// 创建 Context 类来使用策略
class PaymentContext {
    private PaymentStrategy paymentStrategy;
    
    public PaymentContext(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }
    
    public void pay(double amount) {
        paymentStrategy.pay(amount);
    }
}

// 使用策略模式
public class StrategyPatternExample {
    public static void main(String[] args) {
        PaymentContext context = new PaymentContext(new CashPaymentStrategy());
        context.pay(100.0);
        
        context = new PaymentContext(new CardPaymentStrategy());
        context.pay(200.0);
        
        context = new PaymentContext(new PayPalPaymentStrategy());
        context.pay(300.0);
    }
}

首先定义了一个 PaymentStrategy 接口,该接口定义了一个抽象的支付方法。然后,我们实现了三种不同的支付策略:现金、信用卡和 PayPal 支付。每个支付策略都以不同的方式实现了 pay 方法。

接下来,我们创建了一个 PaymentContext 类,它接受一个 PaymentStrategy 对象作为构造函数参数,并将其保存在 paymentStrategy 成员变量中。这个类具有一个 pay 方法,它将调用被选中的支付策略对象的 pay 方法。

最后,在示例的 main 方法中,我们创建了三个不同的 PaymentContext 对象,并分别传递了不同的支付策略对象。在运行时,根据所选支付策略的不同,输出结果会有所不同。

标签:PaymentStrategy,策略,pay,模式,替换算法,public,amount,PaymentContext
From: https://www.cnblogs.com/li053/p/17479809.html

相关文章

  • 体验 TDengine 3.0 高性能的第一步,请学会控制建表策略
    正如我们之前所言,在3.0当中,我们在产品底层做了很大的变化调整,除了架构更加科学高效以外,用户体验也是我们重点优化的方向。以之前一篇文章为例:对于Update功能,用户不再需要任何配置,默认即是比2.0更完善的机制。(https://mp.weixin.qq.com/s/7E8kl9W8IXROx_K0EGQPkg)切换到3.0......
  • java开发操作系统内核:由实模式进入保护模式之32位寻址
    从时模式到保护模式,是计算法技术跨时代的发展。大家想想笨拙的Dos界面,黑底白字的那种冷漠界面到win95各种色彩斑斓的窗口,两者之间的区别其实就是实模式和保护模式的天壤之别。保护模式中,最重要的一个概念莫过于”保护”二字,有了“保护”功能后,CPU为软件提供了很多的功能,当然也有了......
  • 保护模式超强的寻址功能:天空任鸟飞
    X86架构下,cpu的运行模式分两种,一种是实模式,像早期Dos那种黑底白字的命令行操作界面,可以说是实模式最好表现形式,在实模式下也只能产生这种冰冷,呆板,机械的用户体验。后来Intel的CPU进一步发展,引入了保护模式,由此,操作系统的发展进入了新的时代,在保护模式下,CPU功能进一步增强,进而支撑......
  • 盲盒的玩法模式都有哪些
    1.固定库存模式,100个盒子,可以该池子里随意抽奖,直到把100个盒子抽完。这种模式与原来的一元购有点相似,但经过这么多年的演变,它已经发展得更加合规。2.随机无库存模式,只设置概率,不设置库存,用户根据概率购买奖品。只不过在小程序里用这种模式的话,上线审核很难通过。通常以H5或应用程序......
  • ASP.NET Core 6框架揭秘实例演示[38]:两种不同的限流策略
    承载ASP.NET应用的服务器资源总是有限的,短时间内涌入过多的请求可能会瞬间耗尽可用资源并导致宕机。为了解决这个问题,我们需要在服务端设置一个阀门将并发处理的请求数量限制在一个可控的范围,即使会导致请求的延迟响应,在极端的情况会还不得不放弃一些请求。ASP.NET应用的流量限制......
  • minikube配置网络为calico BGP模式
    目录序言1.基础环境1.1硬件基础信息1.2软件基础信息1.3minikube版本信息2.基础配置2.1基础配置2.2安装docker3.minikube部署3.1部署minikube3.2部署kubernetes3.3部署calico4.安装kubernetes插件4.1部署dashboard4.2部署metrics-server5.网络开启BGP5.1宿主机开启BGP......
  • 三种架构模式简介(MVC、MVP、MVVM)
    一简介手机终端随着每年的更新换代,其性能也飞速增长。依附于此的Android应用规模也愈发复杂。截止2023年4月,最新版本8.0.32微信apk大小为238MB,而对比2011年微信1.0版本apk包大小仅为457KB,短短12年增长了533倍。随着应用规模增大,功能扩展困难、测试规......
  • STM32cubeIDE CAN回环模式
    配置如下 经过分频,选择位段1和位段2之后波特率回自己计算CAN总线的频率实在PCLK上CAN是有接收和发送中断的但是需要在STM32CUBEIDE中自己加入滤波器。voidCAN_Config(void){CAN_FilterTypeDefsFilterConfig;/*配置CAN过滤�??*/sFilterConfig.FilterBan......
  • 使敏捷反思会议成功的 8 个极其有效的策略
    ​又是年底,各大app都推出各种年度总结,年度回顾。这些总结有的很有趣,有的很扎心,在推动年底KPI完成的同时,也给我们带来不同角度的思考。而在敏捷工作方法中,反思回顾也是敏捷实践很关键的一环。那么我们如何从敏捷反思会中获得更多积极成果,并由此建立一支强大的团队?我一直觉得......
  • 数据库复习——数据库模式设计
    数据库模式设计如果不好会导致的问题:1.冗余2.导致数据一致性出现问题3.插入异常4.更新异常5.删除异常函数依赖函数依赖是指一个或多个属性的取值可以确定另一个属性的取值。具体地说,如果一个关系模式R中属性集合X的取值能唯一地确定属性集合Y的取值,那么我们......