首页 > 其他分享 >策略模式

策略模式

时间:2023-06-24 12:33:52浏览次数:41  
标签:策略 Commodity pay price 模式 void public

策略模式

策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 (摘自<大话设计模式>)

这种类型的设计模式属于行为型模式

适用场景:(参考菜鸟教程总结)

  • 算法的选择性:当程序需要根据不同的情况选择不同的算法或策略时,策略模式可以很好地应用。它允许在运行时动态地切换算法,使得系统更具灵活性和可扩展性。
  • 多个类似行为的存在:如果一个类拥有多个类似的行为,但每个行为在实现上有所不同,那么可以使用策略模式来将这些行为封装在独立的策略类中,并使它们可以互相替换。这样可以避免使用大量的条件语句或分支逻辑,使代码更加清晰和可维护。
  • 避免暴露复杂的条件逻辑:当存在大量复杂的条件逻辑时,使用策略模式可以将这些逻辑封装在具体的策略类中,使得主体逻辑更加简洁,易于理解和维护。

选择支付方式例子

  • 付款策略接口
/**
 * 付款策略
 *
 * @author admin
 */
public interface IPaymentStrategy {
    /**
     * 付款
     *
     * @param price 价格
     */
    void pay(Double price);
}
  • 付款策略接口-微信实现
/**
 * 微信支付
 *
 * @author admin
 */
public class WechatPaymentStrategy implements IPaymentStrategy {
    @Override
    public void pay(Double price) {
        System.out.println("微信支付:" + price + "元");
    }
}
  • 付款策略接口-支付宝实现
/**
 * 支付宝支付策略
 *
 * @author admin
 */
public class AlipayPaymentStrategy implements IPaymentStrategy {
    @Override
    public void pay(Double price) {
        System.out.println("支付宝支付:" + price + "元");
    }
}
  • 付款策略接口-信用卡实现
/**
 * 信用卡支付策略
 *
 * @author admin
 */
public class CreditCardPaymentStrategy implements IPaymentStrategy {
    @Override
    public void pay(Double price) {
        System.out.println("信用卡支付:" + price + "元");
    }
}
  • 商品信息
/**
 * 商品
 *
 * @author admin
 */
public class Commodity {
    // 价格
    private double price;

    private IPaymentStrategy paymentStrategy;

    Commodity(double price, IPaymentStrategy paymentStrategy) {
        this.price = price;
        this.paymentStrategy = paymentStrategy;
    }

    public void pay() {
        paymentStrategy.pay(this.price);
    }
}
  • 客户端
/**
 * 客户端
 *
 * @author admin
 */
public class Client {
    public static void main(String[] args) {
        Commodity commodity1 = new Commodity(20.00, new WechatPaymentStrategy());
        commodity1.pay();

        Commodity commodity2 = new Commodity(122.00, new AlipayPaymentStrategy());
        commodity2.pay();

        Commodity commodity3 = new Commodity(43.00, new CreditCardPaymentStrategy());
        commodity3.pay();
    }
}
  • 输出结果

微信支付:20.0元
支付宝支付:122.0元
信用卡支付:43.0元

标签:策略,Commodity,pay,price,模式,void,public
From: https://www.cnblogs.com/kouhao/p/17500913.html

相关文章

  • 观察者模式
    观察者模式使用场景:一对多的关联关系,需要一套触发机制。模式类型:观察者模式优点:观察者与被观察者之间建立抽象的耦合,降低耦合。观察者模式支持广播通信。缺点:观察者之间依赖较多,比较复杂。观察者接口/***@authoradmin*/publicinterfaceIObserver{/*......
  • 2023跟我一起学设计模式:组合模式
    组合模式组合模式是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。问题如果应用的核心模型能用树状结构表示,在应用中使用组合模式才有价值。例如,你有两类对象:产品和盒子。一个盒子中可以包含多个产品或者几个较小的盒子。这......
  • 外观模式-12
    概述外观模式(FacadePattern)又称门面模式。它为多个子系统的接口提供了一致的访问接口,定义了高层接口,使得子系统更易于使用。优点:使子系统易于使用,实现客户和子系统的松耦合关系,不影响客户直接使用子系统类。缺点:一定程度上违反“开闭原则”。图示:引入抽象外观类一定程......
  • Reactor 模式与Tomcat中的Reactor
    系列文章目录和关于我参考:[nio.pdf(oswego.edu)](https://gee.cs.oswego.edu/dl/cpjslides/nio.pdf)一丶什么是ReactorThereactordesignpatternisaneventhandlingpatternforhandlingservicerequestsdeliveredconcurrentlytoaservicehandlerbyoneormore......
  • 2023 跟我一起学设计模式:命令模式
    命令模式亦称:动作、事务、Action、Transaction、Command命令模式是一种行为设计模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。问题假如你正在开发一款新的文字编......
  • 强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛
    强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战1.核心词汇概率函数和奖励函数:概率函数定量地表达状态转移的概率,其可以表现环境的随机性。但是实际上,我们经常处于一个未知的环境中,即概率函数和奖励......
  • 强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差
    强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战策略最简单的表示是查找表(look-uptable),即表格型策略(tabularpolicy)。使用查找表的强化学习方法称为表格型方法(tabularmethod),如蒙特卡洛、Q学习和Sarsa。本章通过最......
  • 强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛
    强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战1.核心词汇概率函数和奖励函数:概率函数定量地表达状态转移的概率,其可以表现环境的随机性。但是实际上,我们经常处于一个未知的环境中,即概率函数和奖励......
  • "system32/secpol" 是指位于Windows操作系统的system32文件夹下的一个名为secpol.msc
    "system32/secpol"是指位于Windows操作系统的system32文件夹下的一个名为secpol.msc的文件。该文件是本地安全策略管理器(LocalSecurityPolicy)的主控制台。它允许用户管理和配置计算机的安全策略。本地安全策略管理器提供了一系列安全设置,可以帮助管理员保护系统免受未经授权的......
  • 头一次见单例模式讲的如此透彻
    简介单例模式是一种常用的软件设计模式,用于创建类型。通过单例模式的方法创建的类在当前进程中只有一个实例。单例模式的类只能允许一个实例存在。单例模式的作用是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个。组成部分:私有化构造方法。私有化内部......