登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
【设计模式】告别冗长if-else语句:使用策略模式优化代 ...
【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
[ 复制链接 ]
毋献仪
2025-6-2 00:07:26
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
概述
先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。
作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。
定义
:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
结构
策略模式的主要角色如下:
抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
环境(Context)类:持有一个策略类的引用,最终给客户端调用。
案例实现
【例】促销活动
一家百货公司在定年度的促销活动。针对不同的节日(春节、中秋节、圣诞节)推出不同的促销活动,由促销员将促销活动展示给客户。类图如下:
代码如下:
定义百货公司所有促销活动的共同接口
public interface Strategy {
void show();
}
复制代码
定义具体策略角色(Concrete Strategy):每个节日具体的促销活动
//为春节准备的促销活动A
public class StrategyA implements Strategy {
public void show() {
System.out.println("买一送一");
}
}
//为中秋准备的促销活动B
public class StrategyB implements Strategy {
public void show() {
System.out.println("满200元减50元");
}
}
//为圣诞准备的促销活动C
public class StrategyC implements Strategy {
public void show() {
System.out.println("满1000元加一元换购任意200元以下商品");
}
}
复制代码
定义环境角色(Context):用于连接上下文,即把促销活动推销给客户,这里可以理解为销售员
public class SalesMan {
//持有抽象策略角色的引用
private Strategy strategy;
public SalesMan(Strategy strategy) {
this.strategy = strategy;
}
//向客户展示促销活动
public void salesManShow(){
strategy.show();
}
}
复制代码
优缺点
优点:
策略类之间可以自由切换:由于策略类都实现同一个接口,所以使它们之间可以自由切换。
易于扩展:增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“
避免使用多重条件选择语句(if else),充分体现面向对象设计思想。
缺点:
客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。
使用场景
一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中。
一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,可将每个条件分支移入它们各自的策略类中以代替这些条件语句。
系统中各算法彼此完全独立,且要求对客户隐藏具体算法的实现细节时。
系统要求使用算法的客户不应该知道其操作的数据时,可使用策略模式来隐藏与算法相关的数据结构。
多个类只区别在表现行为不同,可以使用策略模式,在运行时动态选择具体要执行的行为。
源码解析 - Comparator
Comparator 中的策略模式。在Arrays类中有一个 sort() 方法,如下:
[code]public class Arrays{ public static void sort(T[] a, Comparator
设计模式
告别
冗长
if
else
相关帖子
告别Hyprland/Niri键鼠共享难题:Pynergy —— 为 Wayland 设计的 Synergy 兼容客户端
告别依赖地狱:Win11 25H2 + WSL2 CentOS 7 搭建 Synopsys EDA 工具链实践
告别依赖地狱:Win11 25H2 + WSL2 CentOS 7 搭建 Synopsys EDA 工具链实践
告别依赖地狱:Win11 25H2 + WSL2 CentOS 7 搭建 Synopsys EDA 工具链实践
告别依赖地狱:Win11 25H2 + WSL2 CentOS 7 搭建 Synopsys EDA 工具链实践
告别复杂 SQL!一款基于大模型和 RAG 的智能问数系统!
告别售后噩梦:顶级改装店为何首推RF刹车
告别满屏 v-if:用一个自定义指令搞定 Vue 前端权限控制
[大模型实战 08 - 完结篇] 告别孤岛:拥抱 MCP 协议,为大模型打造标准“USB 接口”
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
告别Hyprland/Niri键鼠共享难题:Pynergy —— 为 Wayland 设计的 Synergy 兼容客户端
4
958
渣骑
2026-02-20
业界
告别依赖地狱:Win11 25H2 + WSL2 CentOS 7 搭建 Synopsys EDA 工具链实践
2
108
赶塑坠
2026-03-05
业界
告别依赖地狱:Win11 25H2 + WSL2 CentOS 7 搭建 Synopsys EDA 工具链实践
2
900
胥望雅
2026-03-05
业界
告别依赖地狱:Win11 25H2 + WSL2 CentOS 7 搭建 Synopsys EDA 工具链实践
4
659
孙淼淼
2026-03-05
业界
告别依赖地狱:Win11 25H2 + WSL2 CentOS 7 搭建 Synopsys EDA 工具链实践
1
205
颜清华
2026-03-05
安全
告别复杂 SQL!一款基于大模型和 RAG 的智能问数系统!
1
293
叭遭段
2026-03-05
安全
告别售后噩梦:顶级改装店为何首推RF刹车
3
529
姘轻拎
2026-03-05
安全
告别满屏 v-if:用一个自定义指令搞定 Vue 前端权限控制
0
884
茅断卉
2026-03-12
业界
[大模型实战 08 - 完结篇] 告别孤岛:拥抱 MCP 协议,为大模型打造标准“USB 接口”
0
21
但婆
2026-03-14
回复
(27)
柄利
2025-11-4 09:35:03
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
向梦桐
2025-11-12 03:11:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
舒菀菀
2025-12-15 15:52:57
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
凶契帽
2025-12-20 22:14:58
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
琶轮
2025-12-22 15:38:17
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
龙梨丝
2026-1-1 05:23:42
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
丧血槌
2026-1-18 09:23:19
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
赖琳芳
2026-1-19 12:15:47
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享
秦欣艷
2026-1-20 18:10:57
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
任修
2026-1-21 08:30:32
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
煅圆吧
2026-1-22 21:31:42
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
浅皮懔
2026-1-24 13:17:59
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
句惫
2026-1-26 05:26:20
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
荏牌
2026-1-26 11:18:09
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
左丘雅秀
2026-2-7 01:53:54
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
叟澡帅
2026-2-7 12:31:38
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
章绮云
2026-2-9 06:52:58
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
南宫玉英
2026-2-9 13:08:54
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
班嘉淑
2026-2-9 18:11:16
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
毋献仪
2026-2-9 18:11:16
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9912
7
宋子
9878
8
荪俗
9016
9
闰咄阅
9995
10
刎唇
9995
查看更多
今日好文热榜
630
AI编程时代,35岁以上程序员将何去何从?
826
[Refactor]CPP Learn Data Day 1
0
Block Copy 的内存布局详解
613
把 Flask 搬进 ESP32,高中生自研嵌入式 We
1
渐得如意智能自动化办公平台——定义属于你
883
[AI/Agent/社交] AI Agent社交网络产品:Mo
520
C++协程入门
284
TCSSOFTDEPTCOPY.zip Can download source
800
Vue3 + Iframe 实战:打造企业级流程配置中
823
“你用AI,那我也会用AI,我还要你干什么?
621
自感痕迹论:先验意义场域与经验痕迹内外
7
一道KMP统考真题彻底讲透:nextval与滑动距
6
一道KMP统考真题彻底讲透:nextval与滑动距
741
从 Clubhouse 的崛起与陨落,看语聊房 RTC
244
老马失前蹄,竟然在数据库外键上翻车了,重
8
老马失前蹄,竟然在数据库外键上翻车了,重
6
老马失前蹄,竟然在数据库外键上翻车了,重
6
老马失前蹄,竟然在数据库外键上翻车了,重
8
老马失前蹄,竟然在数据库外键上翻车了,重
7
老马失前蹄,竟然在数据库外键上翻车了,重