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

策略模式

时间:2024-10-17 15:32:05浏览次数:1  
标签:return 策略 int Calculator 模式 public calculator

策略模式代码示例:

代码示例:

// 首先,我们定义一个接口 MathOperation,表示数学操作的策略
// 定义策略接口
interface MathOperation {
    int operate(int a, int b);
}

// 实现加法策略
class Addition implements MathOperation {
    @Override
    public int operate(int a, int b) {
        return a + b;
    }
}

// 实现减法策略
class Subtraction implements MathOperation {
    @Override
    public int operate(int a, int b) {
        return a - b;
    }
}

// 实现乘法策略
class Multiplication implements MathOperation {
    @Override
    public int operate(int a, int b) {
        return a * b;
    }
}
// 然后,我们创建一个 Calculator 类,它接受一个数学操作策略,并根据用户的选择执行相应的操作
class Calculator {
    private MathOperation operation;

    public void setOperation(MathOperation operation) {
        this.operation = operation;
    }

    public int performOperation(int a, int b) {
        if (operation != null) {
            return operation.operate(a, b);
        }
        throw new IllegalStateException("No operation set");
    }
}
// 在这个示例中,我们通过创建不同的数学操作策略类来实现加法、减法和乘法功能,并通过设置不同的策略来执行不同的操作。这就是策略模式的基本思想。
public class StrategyPatternExample {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();

        calculator.setOperation(new Addition());
        int result1 = calculator.performOperation(5, 3);
        System.out.println("Addition Result: " + result1);

        calculator.setOperation(new Subtraction());
        int result2 = calculator.performOperation(10, 4);
        System.out.println("Subtraction Result: " + result2);

        calculator.setOperation(new Multiplication());
        int result3 = calculator.performOperation(6, 2);
        System.out.println("Multiplication Result: " + result3);
    }
}
如果不用策略模式代码示例:

方法
public int add(int a, int b) {
return a + b;
}

public int subtract(int a, int b) {
return a - b;
}

public int multiply(int a, int b) {
return a * b;
}
}

public class NonStrategyPatternExample {
public static void main(String[] args) {
Calculator calculator = new Calculator();

// 调用加法方法
int result1 = calculator.add(5, 3);
System.out.println("Addition Result: " + result1);

// 调用减法方法
int result2 = calculator.subtract(10, 4);
System.out.println("Subtraction Result: " + result2);

// 调用乘法方法
int result3 = calculator.multiply(6, 2);
System.out.println("Multiplication Result: " + result3);
}
}
在这个不使用策略模式的示例中,Calculator 类直接提供了 add、subtract 和 multiply 方法来执行加法、减法和乘法运算。这种方式虽然简单直接,但缺乏策略模式带来的灵活性和可扩展性。

缺点
扩展性差:如果未来需要添加新的运算(如除法),则需要修改 Calculator 类,违反了开闭原则(对扩展开放,对修改关闭)。
代码冗余:每个运算方法都需要单独实现,代码重复度高。
优点
简单易懂:对于简单的应用场景,不需要额外的接口和类,代码更加直观。
因此,是否使用策略模式取决于具体的应用场景和需求。对于需要高度灵活性和可扩展性的系统,策略模式是一个很好的选择。而对于简单且固定的需求,直接使用具体的方法可能更加简单直接。

标签:return,策略,int,Calculator,模式,public,calculator
From: https://www.cnblogs.com/zqlmianshi/p/18472424

相关文章

  • hadoop完全分布式模式
    1.下载、上传、解压,添加环境变量。tarzxf/opt/software/hadoop-2.7.6.tar.gz-C/usr/local/src2.JAVA_HOMEhadoop-env.sh:修改JAVA_HOMEexportJAVA_HOME=/usr/local/src/jdk1.8.0_1813.NameNodehdfs-site.xml:namenode命令的存放路径;namenode的数据存放路径;设置备......
  • redis 持久化策略
    一、redis持久化介绍Redis是个基于内存的数据库,服务一旦宕机,内存中的数据将全部丢失。通常的解决方案是从数据库来重新把这些数据写进redis,但后端数据库有性能瓶颈,如果是大数据量的恢复,会对数据库带来巨大的压力,导致程序响应慢。所以对Redis来说,实现数据的持久化,避免从后端数据......
  • 解析华为鸿蒙next:Web组件自适应布局与渲染模式详解
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。Web组件大小自适应页面内容布局使用......
  • 代理模式
    静态代理静态代理是一种设计模式,用于在不改变目标对象的情况下,增加对目标对象的控制或功能。它的基本思想是创建一个代理类,该类实现与目标类相同的接口,并在其方法中调用目标对象的方法优点:增强功能:可以在不改变目标类的情况下,增强其功能。代码复用:通过代理类可以重用目标类的......
  • EDITPLUS-EditPlus设置护眼模式
    EditPlus版本号:EditPlus4.3(build1256)64-bitTools——>Preferences Colors——>Text取消Default勾选项 Background——>More选项配置如下参数后点击应用并保存 ......
  • 为什么要用工厂模式
    1.复合开闭原则,对扩展开放,对修改关闭。客户端比如feign调用时,当服务端修改代码后,客户端不需要修改代码。Java中的工厂方法模式(FactoryMethodPattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。以下是对Java工厂方法模式的详细解析:一、定义与特点工厂方法模式定义......
  • IIC通信配置时,其GPIO应处于何种工作模式?为何这样做?及IIC总线上为何需增加上拉电阻?其
        直奔主题,以下是以下关于IIC总线应用中所需要理解的特性:1、GPIO应处于何种工作模式?    解:IIC总线通信使用两根新,分别是SDA和SCL,其IO工作模式通常需要配置为开漏输出。因为IIC总线是允许多个设备共享同一总线的,所以所有设备都可以将总线拉低,但不会相互冲突......
  • 02.工厂模式设计思想
    02.工厂模式设计思想目录介绍01.工厂模式设计1.1工厂模式类型1.2工厂模式思考1.3思考一个题目02.简单工厂介绍2.1简单工厂背景2.2简单工厂定义2.3简单工厂结构2.4简单工厂案例2.5简单工厂分析2.6简单工厂场景2.7简单工厂不足03.工厂方法介绍3.1......
  • RabbitMQ系列学习笔记(三)--工作队列模式
    文章目录一、工作队列模式原理二、工作队列模式实战1、抽取工具类2、消费者代码3、生产者代码4、查看运行结果本文参考尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmqRabbitMQ详解Centos7环境安装Erlang、RabbitMQ详细过程(配图)一、工作队列模式原理与......
  • 前端开发设计模式——命令模式
    目录一、命令模式的定义和特点1.定义:         2. 特点:二、命令模式的结构与原理1.结构:2.原理:三、命令模式的实现方式1.定义接口命令:2.创建具体的命令类:3.定义接收者:4.创建调用者:四、命令模式的使用场景1.界面按钮的点击操作:    1.1 ......