设计模式-策略模式

策略模式UML类图:

策略模式类图角色说明: 

Strategy抽象策略角色:该角色主要进行策略方法的定义

ConcreteStrategy具体策略类:不同的策略需要创建不同的策略类,并且实现抽象策略类定义的方法

Context上下文角色:关联抽象策略类,并调用策略类的方法

一、抽象策略类

package com.meng.pay.strategy;
 
import com.meng.model.Order;
 
public interface PayStrategyInterface {
    String pay(Order order);
}

二、具体策略类

支付宝支付实现类:

package com.meng.pay.strategy;
 
import com.meng.model.Order;
 
public class AlipayStrategy implements PayStrategyInterface{
    @Override
    public String pay(Order order) {
        return "Alipay pay success!";
    }
}

微信支付实现类:

package com.meng.pay.strategy;
 
import com.meng.model.Order;
 
public class WechatStrategy implements PayStrategyInterface{
    @Override
    public String pay(Order order) {
        return "Wechat pay success!";
    }
}

三、Context上下文角色类

package com.meng.pay.strategy.context;

import com.meng.model.Order;
import org.springframework.stereotype.Component;

@Component
public abstract class AbstractPayContext {
    public abstract String execute(Order order);
}
package com.meng.pay.strategy.context;

import com.meng.pay.strategy.PayStrategyInterface;
import com.meng.model.Order;

public class PayContext extends AbstractPayContext{
    private PayStrategyInterface payStrategy;

    public PayContext(PayStrategyInterface payStrategy) {
        this.payStrategy = payStrategy;
    }

    public String execute(Order order) {
        return this.payStrategy.pay(order);
    }
}

相关推荐

  1. 设计模式——策略模式

    2024-01-28 10:24:02       47 阅读
  2. 设计模式-策略模式

    2024-01-28 10:24:02       59 阅读
  3. 设计模式——策略模式

    2024-01-28 10:24:02       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 10:24:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 10:24:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 10:24:02       82 阅读
  4. Python语言-面向对象

    2024-01-28 10:24:02       91 阅读

热门阅读

  1. wsl装ubuntu的home目录在哪,如何更改home?

    2024-01-28 10:24:02       48 阅读
  2. 优雅的管理你的docker容器【Docker Swarm篇】

    2024-01-28 10:24:02       45 阅读
  3. mysql-线上常用运维sql

    2024-01-28 10:24:02       63 阅读
  4. 晶体管控制和继电器控制的差异

    2024-01-28 10:24:02       53 阅读
  5. Bootstrap5之icons字体图标及简单布局案例

    2024-01-28 10:24:02       53 阅读
  6. 04-Nacos-服务注册基于spring boot实现

    2024-01-28 10:24:02       66 阅读
  7. 【嵌入式——C++】模板

    2024-01-28 10:24:02       61 阅读
  8. c语言笔试高频考点——字符串处理函数

    2024-01-28 10:24:02       58 阅读
  9. 如何在docker中安装elasticsearch中的拼音分词器

    2024-01-28 10:24:02       63 阅读
  10. mysql中char和varchar的区别

    2024-01-28 10:24:02       52 阅读
  11. Redis学习指南(31)-Redis的查询优化

    2024-01-28 10:24:02       56 阅读