广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java特性之设计模式【策略模式】
  • 325
分享到

Java特性之设计模式【策略模式】

策略模式java设计模式 2023-10-18 16:10:00 325人浏览 八月长安
摘要

一、策略模式 概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式 在策略模式中,我们创建表示各种策略的对象和一个行为随

一、策略模式

概述

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法

主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护

何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为

策略模式一般用于各种算法上面

优缺点

优点:

算法可以自由切换

避免使用多重条件判断

扩展性良好

缺点:

策略类会增多

所有策略类都需要对外暴露

1. 各个角色介绍

1.1 策略类(Strategy

策略是一个接口,该接口定义若干个操作标识,即定义了若干个方法

1.2 环境类 / 策略上下文类(Context)

上下文是依赖于接口的类(是面向策略设计的类,如下图 Context 类),即上下文包含用策略(接口)声明的变量(如下图的strategy成员变量)

上下文提供一个方法(如下图Context类中的的 executeStrategy() 方法),持有一个策略类的引用,最终给客户端调用。该方法委托策略变量调用具体策略所实现的策略接口中的方法(实现接口的类重写策略中的方法,来完成具体功能)

1.3 具体策略类(ConcreteStrategy)

具体策略是实现策略接口的类(如下图的ConcreteStrategyA类和ConcreteStrategyB类)。具体策略实现策略接口所定义的方法,即给出操作标识的具体方法

2. UML图

在这里插入图片描述

3. 具体例子和代码

角色分配

  • Strategy:策略接口
  • OperationAdd:加法策略(实现策略接口)
  • OperationSubtract:减法策略(实现策略接口)
  • OperationMultiply:乘法策略(实现策略接口)
  • OperationDivision:除法策略(实现策略接口)
  • Context:策略上下文

3.1 策略接口以及实现类

  • Strategy
package com.vinjcent.pattern.strategy;public interface Strategy {        int doOperation(int num1, int num2);    }
  • OperationAdd
package com.vinjcent.pattern.strategy;public class OperationAdd implements Strategy {    @Override    public int doOperation(int num1, int num2) {        return num1 + num2;    }}
  • OperationSubtract
package com.vinjcent.pattern.strategy;public class OperationSubtract implements Strategy {    @Override    public int doOperation(int num1, int num2) {        return num1 - num2;    }}
  • OperationMultiply
package com.vinjcent.pattern.strategy;public class OperationMultiply implements Strategy {    @Override    public int doOperation(int num1, int num2) {        return num1 * num2;    }}
  • OperationDivision
package com.vinjcent.pattern.strategy;public class OperationDivision implements Strategy {    @Override    public int doOperation(int num1, int num2) {        return num1 / num2;    }}

3.2 策略上下文类

  • Context
package com.vinjcent.pattern.strategy;public class Context {    private Strategy strategy;    public Context(Strategy strategy) {        this.strategy = strategy;    }    public Strategy getStrategy() {        return strategy;    }    public void setStrategy(Strategy strategy) {        this.strategy = strategy;    }    public int executeStrategy(int num1, int num2) {        return strategy.doOperation(num1, num2);    }}

3.3 测试主函数

package com.vinjcent.pattern.strategy;public class Main {    public static void main(String[] args) {        // 策略上下文        Context context = new Context(new OperationAdd());        // 加法策略        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));        // 减法策略        context = new Context(new OperationSubtract());        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));        // 乘法策略        context = new Context(new OperationMultiply());        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));        // 除法策略        context = new Context(new OperationDivision());        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));    }}
  • 测试结果

在这里插入图片描述

4. 使用场景

  • 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
  • 一个系统需要动态地在几种算法中选择一种
  • 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现

注意事项:

如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题

在这里插入图片描述

来源地址:https://blog.csdn.net/Wei_Naijia/article/details/129109925

--结束END--

本文标题: Java特性之设计模式【策略模式】

本文链接: https://www.lsjlt.com/news/431464.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java特性之设计模式【策略模式】
    一、策略模式 概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式 在策略模式中,我们创建表示各种策略的对象和一个行为随...
    99+
    2023-10-18
    策略模式 java 设计模式
  • Java设计模式之策略模式
    在一个收银系统中,如果普通用户、中级会员、高级会员分别对应着不同的优惠策略,常规编程就要使用一系列的判断语句,判断用户类型,这种情况下就可以使用策略模式。 一、概念理解 策略模式的概...
    99+
    2022-11-13
    Java 设计模式 策略模式
  • Java设计模式之java策略模式详解
    目录为什么使用策略模式?策略模式包含角色策略模式的类图排序案例策略模式的优点策略模式的缺点适用场景源码分析策略模式的典型应用Java Comparator 中的策略模式参考文...
    99+
    2022-11-12
  • C#设计模式之策略模式
    策略模式 所谓策略其实就是做一件事情有很多很多的方法,比如说一个商场要搞促销,促销的方式有可能有很多:打折啊,满100返50啊、积分等等之类的。这种不同的促销方式在我们系统中表示就是...
    99+
    2022-11-13
  • javascript设计模式之策略模式
    目录一. 认识策略模式二. 具体实现和思想三. 策略模式的实际运用四. 总结一. 认识策略模式 策略模式的定义:定义一系列的算法,将他们一个个封装起来,使他们直接可以相互替换。 策略...
    99+
    2022-11-12
  • Java设计模式之策略模式深入刨析
    目录1.基本介绍2.传统方式3.采用策略模式4.策略模式的注意事项和细节1.基本介绍 1)策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之...
    99+
    2022-11-13
  • Java设计模式之策略模式案例详解
    目录优缺点Spring中哪里使用策略模式策略模式设计图代码案例为什么使用策略模式 答:策略模式是解决过多if-else (或者switch-case)代码块的方法之一,提高代码的可维...
    99+
    2022-11-13
  • Java设计模式之策略模式示例详解
    目录定义结构UML类图UML序列图深入理解策略模式策略和上下文的关系策略模式在JDK中的应用该策略接口有四个实现类策略模式的优点策略模式的缺点策略模式的本质在讲策略模式之前,我们先看...
    99+
    2022-11-13
  • 深入了解Java设计模式之策略模式
    目录定义解决的问题核心要点类图溢出效用代码实现核心接口实现类-三个Context类Main方法拓展JDK源码Spring源码定义 定义了算法家族,分别封装起来,让他们之间可以相互替换...
    99+
    2022-11-13
  • 深入理解Java设计模式之策略模式
    目录一、什么是策略模式二、策略模式的结构三、策略模式的应用场景四、策略模式的优缺点六、策略模式的实现七、策略模式和简单工厂模式的结合八、策略枚举的实现九、总结一、什么是策略模式 策略...
    99+
    2022-11-12
  • Java设计模式之策略模式实例分析
    这篇文章主要介绍“Java设计模式之策略模式实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java设计模式之策略模式实例分析”文章能帮助大家解决问题。1.基本介绍1)策略模式(Strateg...
    99+
    2023-06-30
  • java设计模式之策略模式怎么实现
    这篇文章主要介绍了java设计模式之策略模式怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。策略模式:策略模式是一种定义一系列算法的方法,算法完成的工作都是相同的工作,...
    99+
    2023-05-31
    java
  • java设计模式--策略模式详解
    目录策略模式Demo代码:总结策略模式 策略模式(Strategy Pattern)属于行为型模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。用算法族分别封装起来...
    99+
    2022-11-12
  • PHP行为设计模式之策略模式
    目录PHP策略模式(Strategy Pattern)适用性实现步骤优点缺点示例代码PHP策略模式(Strategy Pattern) 策略模式是一种行为设计模式,它允许在运行时选择...
    99+
    2023-05-15
    PHP行为设计模式 PHP策略模式
  • JavaScript设计模式之策略模式详解
    什么是设计模式?为什么需要学习设计模式? 学习设计模式的目的是:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络...
    99+
    2022-11-13
  • JS设计模式之策略模式怎么用
    小编给大家分享一下JS设计模式之策略模式怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!策略模式的概念引用:在软件开发中也常...
    99+
    2022-10-19
  • Java通俗易懂系列设计模式之策略模式
    目录介绍实例类图总结介绍 策略设计模式是行为设计模式之一。当我们为特定任务使用多个算法时,使用策略模式,客户端决定在运行时使用的实际实现。 策略模式的最佳示例之一是Collecti...
    99+
    2022-11-12
  • Java中常用的设计模式之策略模式详解
    目录优点缺点使用场景一、实现方式1、订单类型枚举类2、订单处理接口3、普通订单处理器4、秒杀订单处理器5、拼团订单处理器6、下单管理器二、测试1、引入依赖2、测试用例总结优点 1.算...
    99+
    2022-11-13
  • QtC++ 设计模式(四)——策略模式
    策略模式 序言理解源码 序言 还是参考的菜鸟教程,会C++的还是看C++的方式来得舒服。 . 理解 使用符合UML规范的便于理解和回忆,接口其实就是普通的基类 . 源码 strategy.h /// 策略class Strat...
    99+
    2023-08-30
    c++ 设计模式 策略模式
  • java设计模式的策略模式是什么
    这篇文章主要介绍“java设计模式的策略模式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java设计模式的策略模式是什么”文章能帮助大家解决问题。策略模式亦称:Strategy意图策略模式是...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作