策略模式和责任链模式的区别

‌**策略模式责任链模式的主要区别在于它们的设计目的、应用场景以及实现方式。**‌

设计目的和应用场景

策略模式 ‌的主要目的是将一组算法或行为封装成独立的策略对象 ,并使客户端能够在运行时选择其中一个策略来执行。这种模式通常用于实现相同操作的不同算法或策略之间的切换和替换。它适用于需要在运行时动态选择算法或策略的情况,以及避免使用大量的条件语句来实现不同行为的情况‌。例如,在电商网站中计算商品的折扣价格时,不同类型的商品可以有不同的折扣策略,如普通商品按原价销售,VIP用户享受9折优惠,促销商品打7折等‌。

责任链模式 ‌的主要目的是将请求的发送者和接收者解耦,允许多个对象依次处理请求,直到其中一个对象能够处理请求为止。这种模式通常用于创建一个处理请求的对象链,每个对象都尝试处理请求,如果它不能处理,则将请求传递给下一个对象,直到找到一个合适的处理者。它适用于具有多个对象处理请求的场景,每个对象可以决定是否处理请求以及如何传递请求,例如日志记录、异常处理等‌。

实现方式和参与者

策略模式‌通常涉及两个主要参与者:上下文(Context)和策略(Strategy)。上下文是客户端与策略对象交互的接口,策略是实际执行的算法或行为的接口。通过面向对象的继承和多态机制,策略模式实现了相同行为在不同场景下的不同实现‌。

责任链模式‌涉及多个处理器或处理者对象,它们组成一个链。每个处理器都有一个处理请求的方法,并且知道下一个处理者是谁。请求从链的开头传递到链的末尾,直到有一个处理者处理它或者请求到达链的末尾‌。

条件判断

如果你的这种需求的处理者存在逐级传递包含关系,那么用责任链模式;

如果处理方法不存在逐级传递,而是像if else 一样划分适用范围或条件,并且这种划分可以有很多种或者无数种,那么就用策略模式。

相关推荐
谢栋_1 天前
设计模式从入门到精通之(七)责任链模式
java·设计模式·责任链模式
张小姐的猫3 天前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
笨拙的老猴子9 天前
小明学架构师的第七课:策略模式:告别if-else的选择困难症
系统架构·策略模式
wuqingshun3141599 天前
什么是责任链模式,一般用在什么场景?
java·责任链模式
ttod_qzstudio10 天前
【软考设计模式】责任链模式:请求传递的多级处理与发送接收解耦精讲
设计模式·责任链模式
肖爱Kun10 天前
C++设计策略模式
开发语言·c++·策略模式
折哥的程序人生 · 物流技术专研11 天前
Java 23 种设计模式:从踩坑到精通 | 番外:策略 vs 模板方法 —— 组合与继承的终极对决
java·策略模式·java面试·comparator·模版方法模式·java设计模式·从踩坑到精通
折哥的程序人生 · 物流技术专研11 天前
Java 23 种设计模式:从踩坑到精通 | 番外:状态 vs 策略 —— if-else 消除的两条路,你走对了吗?
java·spring·状态模式·策略模式·java面试·java设计模式·从踩坑到精通
c2385612 天前
第三篇文档:多级信件分拣流水线 —— 责任链模式完美封装 System V 消息队列
运维·服务器·责任链模式
ttod_qzstudio13 天前
【软考设计模式】策略模式:算法族的封装与动态切换精讲
设计模式·策略模式