策略模式实现

策略模式:

策略模式是一种行为型设计模式,它允许你定义一系列算法,把它们封装起来,并且使它们可以互相替换。这样,使用算法的客户端代码可以独立于具体的算法实现方式。

就好像是你要去旅行,你可以选择多种不同的交通工具(比如汽车、飞机、火车),每种交通工具都是一种策略。你根据自己的需求和情况选择最适合的交通方式,这就是策略模式的思想。

在策略模式中,通常有三个角色:

  1. 上下文(Context):包含一个策略对象,负责和客户端交互。上下文知道策略对象,并能根据需要调用具体的策略来完成任务。
  2. 策略接口(Strategy Interface):定义了一系列算法的共同行为。通常是一个接口或者抽象类,规定了具体策略类所必须实现的方法。
  3. 具体策略类(Concrete Strategies):实现了策略接口,在具体的策略类中实现了算法。

同样的,来实现一个计算器,他拥有加法、减法、乘法等运算。

策略接口

java 复制代码
public interface BaseStratege {
    int compute(int x,int y);
}

具体策略类

java 复制代码
class Add implements BaseStratege {

    @Override
    public int compute(int x, int y) {
        return x+y;
    }
}

class Sub implements BaseStratege {

    @Override
    public int compute(int x, int y) {
        return x-y;
    }
}

上下文Context

java 复制代码
public class Context {

    private BaseStratege stratege;

    public Context(BaseStratege stratege) {
        this.stratege = stratege;
    }

    public int compute(int x,int y){
        return stratege.compute(x,y);
    }

    public BaseStratege getStratege() {
        return stratege;
    }

    public void setStratege(BaseStratege stratege) {
        this.stratege = stratege;
    }
}

和工厂模式类似,同样先创建一个接口,然后创建对应的实现类,再使用一个Context类来计算结果,但是Context中获取特定实现类的操作,是需要我们手动给定的,也就是说策略模式需要我们记住所需的实现类

java 复制代码
 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        int y = scanner.nextInt();
        int result = new Context(new Add()).compute(x, y);
        System.out.println(result);
    }

以上的 Add()类就是需要我们记住的,而不是像工厂一样只需要给定一个特定的条件.

总结:

​ 工厂模式和策略模式在形式上比较相似,但是在实际使用场景中有很大的不同,工厂模式用在能通过某些条件得到确定的实现类,策略模式用在需要我们来判断所需的实现类。

相关推荐
进击的荆棘5 天前
Linux系统——线程同步与互斥
linux·运维·服务器·策略模式·同步·互斥·posix
AlanAshley10 天前
四种镜像文件在各操作系统的使用用法及区别
策略模式·虚拟机
拆房老料11 天前
【第四部分:Agentic 智能体设计模式】17. Agent 路由模式详解:从意图识别到动态模型选择
java·设计模式·ai编程·策略模式
zhangfeng113314 天前
com.apple.quarantine 并不是乱码,而是 macOS Gatekeeper 给下载文件自动打上的“隔离属性
macos·策略模式
lpfasd12315 天前
Ollama 还是 LM Studio:在 24GB 的 M6 Mac 上,我把 Ollama 卸载了
macos·策略模式
福大大架构师每日一题17 天前
ollama v0.40.11发布:macOS原生语音生成上线,d3决策模型正式加入
macos·策略模式
AIex-YH20 天前
发酵罐里点一盏灯:光发酵,正在重算微藻蛋白的成本账
运维·制造·策略模式
snakecy21 天前
macOS 安装 LaTeX 全流程指南:从 MacTeX 到中文排版
macos·策略模式
钱栈up25 天前
从 macOS 切回 Windows,我用 5 个免费工具把 80% 操作习惯搬了回来
windows·macos·策略模式
kunicoding1 个月前
C++ 策略模式实战:写一个可以“一键换输出“的日志系统
开发语言·c++·策略模式