【JAVA设计模式】策略模式

article/2025/10/4 17:43:58

1.什么是策略模式?

策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,相同的事情-----选择不用同方式 (不同实现)举例子,最终可以实现解决多重if判断问题。

2.策略模式优缺点?

1.优点

算法可以自由切换(高层屏蔽算法,角色自由切换)

避免使用多重条件判断(如果算法过多就会出现很多种相同的判断,很难维护)

扩展性好(可自由添加取消算法 而不影响整个功能)

2.缺点

策略类数量增多(每一个策略类复用性很小,如果需要增加算法,就只能新增类)

所有的策略类都需要对外暴露(使用的人必须了解使用策略,这个就需要其它模式来补充,比如工厂模式、代理模式)

3.策略模式的使用场景

1.联合登录 QQ联合登录/微信联合登录/钉钉联合登录

2.排序算法 冒泡/简单选择/堆排序等

3.支付方式 支付宝/微信支付/银联支付/平安支付等

4.快递 申通、圆通、京东、德邦、顺丰等

5.发送通知 短信、微信公众号模板、钉钉通知、邮件

4.案例(联合登录)

1.创建登录的service

/*** @desc: 策略模式* @author: xhs* @date: 2022/6/12 11:17* @version: JDK 1.8*/
public interface LoginStrategyService {/*** 登录* @return*/String login();
}

2.创建QQ登录和微信登录的实现类

import com.xhs.pattern.strategy.service.LoginStrategyService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;/*** @desc: QQ登录* @author: xhs* @date: 2022/6/12 11:23* @version: JDK 1.8*/
@Slf4j
@Service("QQ")
public class QqLoginServiceImpl implements LoginStrategyService {/*** QQ登录* @return*/@Overridepublic String login() {log.info(">>>>>>>>>QQ登<<<<<<<<<<<<");return "QQ登录";}
}

import com.xhs.pattern.strategy.service.LoginStrategyService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;/*** @desc: 微信登录* @author: xhs* @date: 2022/6/12 11:23* @version: JDK 1.8*/
@Slf4j
@Service("weChart")
public class WechartLoginImpl implements LoginStrategyService {/*** 微信登录* @return*/@Overridepublic String login() {log.info(">>>>>>>>>微信登录<<<<<<<<<<<<");return "微信登录";}
}

3.创建登录的controller

package com.xhs.pattern.strategy.controller;import com.xhs.pattern.dto.request.LoginRequest;
import com.xhs.pattern.strategy.service.LoginStrategyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Map;/*** @desc: 策略模式* @author: xhs* @date: 2022/6/12 11:01* @version: JDK 1.8*/@RestController
@RequestMapping("/login")
public class StrategyController {@Autowiredprivate Map<String, LoginStrategyService> loginStrategyServiceMap;/*** 策略模式登录* @param loginRequest* @return*/@PostMapping("/login")public String login(@RequestBody LoginRequest loginRequest) {LoginStrategyService loginStrategyService = loginStrategyServiceMap.get(loginRequest.getLoginType());String login = loginStrategyService.login();return login;}}

5.测试

 

源码地址:https://gitee.com/xhs101/tools-parent


http://chatgpt.dhexx.cn/article/1lxAAHk4.shtml

相关文章

java微信关注事件_java策略模式在接收微信事件推送上的具体应用

java策略模式&#xff0c;在我的认知中是根据不同选择执行不同的实现。通过if或者switch-case也能实现这种逻辑&#xff0c;但是代码冗余&#xff0c;可扩展性不强。 百度百科上的解释为策略模式作为一种软件设计模式&#xff0c;指对象有某个行为&#xff0c;但是在不同的场景…

Java设计模式之3种策略模式实现

一、什么是策略模式 所谓策略模式&#xff0c;就是定义了一组策略&#xff0c;分别封装在不同类中&#xff0c;每种策略都可以根据当前场景相互替换&#xff0c;从而使策略的变化可以独立于操作者。比如我们要去某个地方&#xff0c;会根据距离的不同来选择不同的出行方式&…

java8 策略模式_JAVA设计模式之策略模式

策略模式&#xff1a;在策略模式(Strategy Pattern)中&#xff0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中&#xff0c;我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对…

git如何提交代码

代码提交 代码提交一般有五个步骤&#xff1a; 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 1. 查看目前代码的修改状态 提交代码之前&#xff0c;首先应该检查目前所做的修改&#xff0c;运行git status命令 a)…

修改git提交时间

问题描述&#xff1a; 修改git提交记录的时间 git脚本&#xff1a; 此方法使用github上的开源工具完成。感谢无私的奉献者&#xff01; 操作步骤&#xff1a; github上下载文件 解压文件夹&#xff0c;把git-redate文件置于git安装目录的\mingw64\libexec\git-core文件夹…

git提交时常用命令

git提交时常用命令 一、git命令 -- 本地仓库与远程仓库建立链接 git init &#xff08;初始化本地仓库&#xff09; git remote add origin 远程仓库网址 git remote -v (查看远程仓库) git remote rm origin (删除远程分支)-- checkout多种用法 git checkout 文件名 &#…

git提交分支

1. git提交分支相关 在本地新建分支&#xff0c;保证和远程分支一样 git checkout -b 分支名如果分支已存在&#xff0c;只需要切换的话 git checkout 分支名提交前先把代码拉下来更新一下&#xff0c;确保不会覆盖别人的代码 git pull origin 远程分支(如果有)解决冲突 git …

Git 的提交

1 提交对象 理解Git分支&#xff0c;就需要了解提交及在提交过程中产生的提交对象&#xff08;commit object&#xff09;。在进行提交时Git会存储一个提交对象&#xff0c;其中包含一个指针&#xff0c;它指向此次提交时暂存内容的快照。除此之外&#xff0c;提交对象中还包含…

git代码提交

代码提交 代码提交一般有五个步骤&#xff1a; 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 1. 查看目前代码的修改状态 提交代码之前&#xff0c;首先应该检查目前所做的修改&#xff0c;运行git status命令 a…

【git提交】流程

1- git提交&#xff08;分支合并&#xff09;操作流程&#xff1a; git 提交代码到自己的分支&#xff0c;并合并到主分支的完整流程 分支 sml &#xff0c; 主分支&#xff0c; master 分支msl上操作 git status git add . git commit -m ‘xxxxxx’ git pull origin master…

git提交规范,规范自己的提交标准

为了规范我的git提交内容&#xff0c;提交的时候commit -m “备注的信息”&#xff0c;但是每个人的备注信息千奇百怪&#xff0c;为了统一&#xff0c;我们进行了git的规范。 首先要全局安装commitizen npm i -g commitizen4.2.4然后安装插件 npm i cz-customizable6.3.0…

git提交常用命令

git 安装 1.在终端&#xff0c;检查git是否安装 git --version 2.没有安装的话&#xff0c;去git官网&#xff0c;下载git 3.安装后&#xff0c;在终端&#xff0c;检查git是否安装 4设置用户名和邮件地址&#xff08;最好和github的用户名/邮箱保持一致 git config -…

Git 提交规范

1. 背景 Git 是目前世界上最先进的分布式版本控制系统&#xff0c;在我们平时的项目开发中已经广泛使用。而当我们使用Git提交代码时&#xff0c;都需要写Commit Message提交说明才能够正常提交。 git commit -m "提交"然而&#xff0c;我们平时在编写提交说明时&a…

git 提交命令(附加git常用命令)

一、提交到git仓库 1、进入git终端、输入git init指令、会在当前目录生成一个.git的文件夹 git init2、然后通过git status 查看&#xff0c;该指令作用是 列出修改过的(绿色标识)、新创建的(红色标识)、已经暂存但未提交的文件(白色标识) git status3、然后通过git add ind…

git提交

Git提交代码步骤 1.1 第1步&#xff1a;同步远程仓库代码&#xff1a;git pull 提交代码第1步&#xff1a;git pull 同步远程仓库代码到本地 git add / git commit代码之前首先git pull&#xff0c;需先从服务器上面拉取代码&#xff0c;以防覆盖别人代码&#xff1b;如果有…

你真的了解单点登录(SSO)吗? 单点登录实现方式

在程序开发中&#xff0c;特别是网站类开发&#xff0c;会接触到单点登录(SSO)&#xff0c;什么是单点登录&#xff1f;单点登录(SSO)有什么用&#xff1f;下面就来详细介绍一下。 1 单点登录 1.1 什么是单点登录 单点登录的英文名叫做&#xff1a;Single Sign On&#xff0…

单点测试与多点测试

最近在使用PAT与Codeup写程序玩&#xff0c;发现这两者的OJ方式不同。 PAT是单点测试&#xff0c;即输入一组测试用例即可输出结果&#xff0c; 而Codeup是多点测试&#xff0c;即输入所有测试用例后才会输出所有输出结果。 在这里写两个最简单的ab求和小程序来说明二者的区别…

什么是单点登录?如何理解单点登录

什么是单点登录&#xff1f; 什么是单点登录&#xff1f; 因为讲了Cookie&#xff0c;讲了Session&#xff0c;这里我觉得有必要说一下单点登录。我们先来看一下什么是单点登录&#xff1a;单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;…

单点登录和多点登录

SSO&#xff08;单点登录&#xff09;的概念&#xff1a;在一个多系统共存的环境下&#xff0c;用户在一处登录后&#xff0c;就不用再其他系统中登录&#xff0c;也就是用户的一次登录能得到其他所有系统的信任。 SSO&#xff08;单点登录&#xff09;的应用场景&#xff1a;…

OAuth2.0 实现单点登录

文章目录 OAuth2.0 实现单点登录一、四种授权模式二、搭建验证服务器三、使用 Postman 接口测试四、基于 EnableOAuth2Sso 实现五、基于 EnableResourceServer 实现 &#x1f6a9;&#x1f36c;5.1 资源服务器&#x1f36c;5.2 客户端访问&#x1f36c;5.3 解决远程调用 六、使…