Java 设计模式中的策略模式详情

Java 设计模式中的策略模式

策略模式基础概念

策略模式是一种行为型设计模式,它能让你定义一些算法并将其封装到具有公共接口的独立类中。由于所有策略类都实现了相同的接口,因此它们可以自由地相互替换。

策略模式的结构

策略模式的核心在于定义一个策略接口(Istrategy),所有的算法都实现这个接口;然后定义一个上下文类(Context),这个上下文类有一个策略接口类型的成员变量strategy,初始化时或者运行时动态地给这个成员变量赋值,从而使得上下文类可以使用不同的算法。

public interface IStrategy {
    void algorithm();
}

public class ConcreteStrategyA implements IStrategy {
    @Override
    public void algorithm() {
        // 算法A的具体实现
    }
}

public class ConcreteStrategyB implements IStrategy {
    @Override
    public void algorithm() {
        // 算法B的具体实现
    }
}

public class Context {
    private IStrategy strategy;

    public Context(IStrategy strategy) {
        this.strategy = strategy;
    }

    public void setStrategy(IStrategy strategy) {
        this.strategy = strategy;
    }

    public void doStrategy() {
        if (strategy != null) {
            strategy.algorithm();
        }
    }
}

策略模式的应用场景

策略模式通常在以下场景中使用:

  • 当你有许多类似的算法,以相同的方式处理数据时,可以使用策略模式。
  • 当你需要在运行时选择算法的不同变体时,可以使用策略模式。
  • 当您想要隐藏算法的实现细节时,可以使用策略模式。

策略模式的示例

示例1:支付方式算法

假设你正在开发一个电商网站,你需要允许用户选择不同的支付方式来支付订单。你可以使用策略模式来实现。

public interface PaymentStrategy {
    void pay(double amount);
}

public class AlipayStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("通过支付宝支付了" + amount + "元");
    }
}

public class WechatPayStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("通过微信支付了" + amount + "元");
    }
}

public class Order {
    private PaymentStrategy strategy;

    public void setStrategy(PaymentStrategy strategy) {
        this.strategy = strategy;
    }

    public void pay(double amount) {
        if (strategy != null) {
            strategy.pay(amount);
        }
    }
}

public class Client {
    public static void main(String[] args) {
        PaymentStrategy strategy = new AlipayStrategy();
        Order order = new Order();
        order.setStrategy(strategy);
        order.pay(100);

        strategy = new WechatPayStrategy();
        order.setStrategy(strategy);
        order.pay(200);
    }
}

示例2:排序算法

假设你正在开发一个工具程序,你需要支持各种排序算法,包括冒泡排序、快速排序、插入排序等。你可以使用策略模式来实现。

public interface SortStrategy {
    void sort(int[] data);
}

public class BubbleSortStrategy implements SortStrategy {
    @Override
    public void sort(int[] data) {
        // 冒泡排序的具体实现
    }
}

public class QuickSortStrategy implements SortStrategy {
    @Override
    public void sort(int[] data) {
        // 快速排序的具体实现
    }
}

public class InsertionSortStrategy implements SortStrategy {
    @Override
    public void sort(int[] data) {
        // 插入排序的具体实现
    }
}

public class Sorter {
    private SortStrategy strategy;

    public void setStrategy(SortStrategy strategy) {
        this.strategy = strategy;
    }

    public void sort(int[] data) {
        if (strategy != null) {
            strategy.sort(data);
        }
    }
}

public class Client {
    public static void main(String[] args) {
        SortStrategy strategy = new BubbleSortStrategy();
        Sorter sorter = new Sorter();
        sorter.setStrategy(strategy);
        int[] data = {5, 4, 3, 2, 1};
        sorter.sort(data);

        strategy = new QuickSortStrategy();
        sorter.setStrategy(strategy);
        sorter.sort(data);

        strategy = new InsertionSortStrategy();
        sorter.setStrategy(strategy);
        sorter.sort(data);
    }
}

以上是策略模式的完整攻略,通过两个示例的讲解,你应该能够更好地理解策略模式的概念,以及在实际开发中如何应用策略模式来解决问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 设计模式中的策略模式详情 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 全面理解Java类和对象

    全面理解Java类和对象 Java是一种基于类和对象的编程语言。在Java中,类和对象是构建代码的基本模块。为了更好地理解Java类和对象,必须全面掌握它们的概念、属性和方法。 Java类 Java类是一组属性和方法的集合。这些属性和方法都有一个共同的名称,称为类成员。Java类可以包含以下类型的成员: 实例变量 类变量(静态变量) 构造函数 方法 Java…

    Java 2023年5月26日
    00
  • Maven安装过程图文详解

    下面我将为你详细讲解”Maven安装过程图文详解”的完整攻略。 Maven是什么 Maven是一个项目管理和构建工具,它提供了一种简单易用的构建方式便于开发人员使用。使用Maven可以方便的管理依赖,自动生成项目结构,编译,测试,打包等。 Maven的安装过程 以下是Maven的安装过程。 1. 下载Apache Maven Maven的官方网站为 http…

    Java 2023年5月20日
    00
  • IDEA全局查找关键字的用法解读

    下面就为大家详细讲解“IDEA全局查找关键字的用法解读”的完整攻略。 1. 什么是IDEA全局查找 IDEA全局查找是指在IDEA中查找某个关键字时,不仅可以在当前文件中查找,还可以在整个项目中查找。 2. 如何使用IDEA全局查找 使用IDEA全局查找非常简单,具体步骤如下: 打开需要查找的项目。 在菜单栏中点击“Edit” -> “Find” -&…

    Java 2023年6月15日
    00
  • 如何使用java修改文件所有者及其权限

    下面是使用Java修改文件所有者及其权限的攻略: 1. 获取文件或目录对象 首先需要获取需要修改权限和所有者的文件或目录对象,可以使用Java的File类进行操作。例如,以下代码获取名为“test.txt”的文件对象: File file = new File("test.txt"); 2. 修改文件或目录的所有者 文件或目录的所有者可以…

    Java 2023年5月19日
    00
  • 总结一些Java常用的加密算法

    下面我来详细讲解一下“总结一些Java常用的加密算法”的完整攻略。 1. 常用的加密算法 Java中有很多加密算法,常用的有以下几种: 1.1 对称加密算法 对称加密算法也称为共享密钥加密,是指加密和解密使用同一个密钥的加密算法。常见的对称加密算法有DES、3DES、AES等。 1.2 非对称加密算法 非对称加密算法也称为公钥加密,是指加密和解密使用不同密钥…

    Java 2023年5月19日
    00
  • 老生常谈Java动态编译(必看篇)

    老生常谈Java动态编译攻略 什么是Java动态编译 Java动态编译,顾名思义,是指在程序运行期间动态地将Java源代码编译成Java字节码,然后通过Java虚拟机(JVM)加载和执行。通常情况下,Java源代码必须在编译期间被编译成字节码,然后才可以在JVM上执行。但是,在某些情况下,Java动态编译提供了一种非常灵活的方式来在程序运行期间编写和加载Ja…

    Java 2023年5月26日
    00
  • Spring MVC文件配置以及参数传递示例详解

    下面是关于“Spring MVC文件配置以及参数传递示例详解”的完整攻略,包含两个示例说明。 Spring MVC文件配置以及参数传递示例详解 Spring MVC是一个流行的Java Web框架,它可以帮助我们更加方便地构建Web应用程序。本文将介绍如何使用Spring MVC文件配置来配置控制器和视图,并演示如何使用控制器来处理参数传递。 步骤一:创建S…

    Java 2023年5月17日
    00
  • 使用spring boot 整合kafka,延迟启动消费者

    下面是使用Spring Boot整合Kafka,延迟启动消费者的详细攻略,由以下步骤组成: 添加Kafka依赖 在Spring Boot项目中,需要在pom.xml文件中添加Kafka的依赖,可以通过以下方式添加: <dependency> <groupId>org.springframework.kafka</groupId&…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部