设计模式-策略模式

策略模式的主要角色如下:

  1. 抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  2. 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
  3. 环境或上下文(Context)类:是使用算法的角色, 持有一个策略类的引用,最终给客户端调用。

接口Strategy

java 复制代码
package com.cocoa.strategy;

/**
 * 抽象策略类
 **/
public interface Strategy {

    void algorithm();
}

类StrategyA

java 复制代码
package com.cocoa.strategy;

public class StrategyA implements Strategy {

    @Override
    public void algorithm() {
        System.out.println("执行策略A");
    }
}

类StrategyB

java 复制代码
package com.cocoa.strategy;

public class StrategyB implements Strategy {

    @Override
    public void algorithm() {
        System.out.println("执行策略B");
    }
}

类StrategyFactory/Context(策略工厂)

java 复制代码
package com.cocoa.strategy;

/**
 * 环境类
 **/
public class StrategyFactory {

    // 维持一个对抽象策略类的引用
    private Strategy strategy;

    public StrategyFactory(Strategy strategy) {
        this.strategy = strategy;
    }

    // 调用策略类中的算法
    public void algorithm(){
        strategy.algorithm();
    }
}

测试类Main

java 复制代码
package com.cocoa.strategy;

public class Main {
    public static void main(String[] args) {
        Strategy strategyA  = new StrategyA();
        StrategyFactory context = new StrategyFactory(strategyA); //可以在运行时指定类型,通过配置文件 + 反射机制实现

        context.algorithm();// 执行相应策略
    }
}
相关推荐
XXOOXRT4 分钟前
Ubuntu搭建Java项目运行环境(JDK17+MySQL8.0)超详细教程
java·linux·mysql·ubuntu
m0_719084116 分钟前
启动命令111
java
客卿12318 分钟前
用两个栈实现队列
android·java·开发语言
skywalk816319 分钟前
esxi8 虚拟机中怎么安装mac os(纯AI回答,未实践)
策略模式·esxi
java1234_小锋31 分钟前
Java高频面试题:谈谈你对SpringBoot的理解?
java·开发语言·spring boot
空空潍32 分钟前
Spring AI 实战系列(三):多模型共存+双版本流式输出
java·人工智能·spring
彭于晏Yan43 分钟前
SpringBoot整合ECC实现文件签名与验签
java·spring boot·后端
pupudawang1 小时前
Spring EL 表达式的简单介绍和使用
java·后端·spring
jiankeljx1 小时前
Spring Initializr创建springboot项目,提示java 错误 无效的源发行版:16
java·spring boot·spring
competes1 小时前
深圳程序员职业生涯
java·大数据·开发语言·人工智能·java-ee