设计模式之策略模式

Java33

在收银系统中,如果普通用户、中级会员和高级会员对应不同的优惠策略,常规编程需要使用一系列判断语句来判断用户类型,在这种情况下可以使用策略模式。

[En]

In a cashier system, if ordinary users, intermediate members and senior members correspond to different preferential strategies, conventional programming should use a series of judgment sentences to judge the type of users, in which case the strategy mode can be used.

一、概念理解

策略模式的概念很好理解,它将对象和行为分开,将行为定义为 一个行为接口和具体行为的实现,每个if判断都可以理解为一个策略。

如果在出纳系统中使用策略模式,则普通成员、中级成员和高级成员应分别定义特定的策略类,实现各自的方法,定义环境类,并持有对策略类的引用。引用调用相应的策略类方法,并将相应的特定策略对象传递到客户端。

[En]

*If the policy pattern is used in the cashier system, ordinary, intermediate and senior members should respectively define a specific policy class, implement their respective methods, define an environment class, and hold references to the policy class. the corresponding policy class method is called by the reference, and the corresponding specific policy object is passed into the client. *

学过了状态模式,很多人也把状态模式和状态模式搞混,现在就可以考虑一下为什么不使用状态模式?

各个策略之间并不存在流转(比如:状态1234切换)关系,都是各自的算法实现各自的逻辑,客户端控制调用哪个策略,如果使用状态模式就变成了,先调用普通会员的策略,再调用中级会员的策略,再调用高级会员的策略,看到最后的优惠用户估计会乐疯吧!

和状态模式一样,策略模式也应包含三个角色:

抽象策略类:策略是定义几个算法标识的接口,也就是几个抽象方法

[En]

Abstract policy class: a policy is an interface that defines several algorithm identifiers, that is, several abstract methods

具体策略类:具体策略是实现策略接口的类

环境类 /上下文类:上下文提供一个方法,持有一个策略类的引用,最终给客户端调用。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

Metro 界面设计案例

Metro是微软的一贯设计风格,相对Google的Material Desgin ,Metro更加的简洁,清晰明了。 Material 的设计也是很不错的,而且在Android,Web上都能经常看到M...
Java

Java 16 新特性:record类

以前我们定义类都是用 class关键词,但从Java 16开始,我们将多一个关键词 record,它也可以用来定义类。 record关键词的引入,主要是为了提供一种更为简洁、紧凑的 final类的定义...
Java

后端接口对接注意事项

后端接口对接的模式范本: 概念澄清: 【下单】是个广义上的叫法,并不仅限于支付订单的订单。因为整个过程都围绕一个【seqNo】订单号或流水号这个唯一标识展开,因而统称【下单】。 【下单】可用于分发优惠...
Java

JAVA 线程的6种状态

线程状态(Thread.State)。线程处于下列状态的其中之一。 一个线程一次只能有一个状态。这些状态是虚拟机线程状态,不能反映任何操作系统的线程状态。[En]A thread can only h...
Java

Halo 开源项目学习(三):注册与登录

基本介绍 首次启动 Halo 项目时需要安装博客并注册用户信息,当博客安装完成后用户就可以根据注册的信息登录到管理员界面,下面我们分析一下整个过程中代码是如何执行的。 博客安装 项目启动成功后,我们可...
Java

浅谈一下流式处理平台Flink

大数据框架听过很多,比如 Hadoop,HDFS...不过自己的项目都没有上过 为什么突然提到 Flink,因为最近一个项目需要用到,所以学习最好的方式就是 项目驱动 我过去认为我必须在做之前学习一些...
Java

最简单的JVM内存结构图

JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样, 案例先行,方便大家理解记忆。 如上代码:在主线程中for循环新建2个线程调用sayHel...
Java

从零玩转人脸识别之RGB人脸活体检测

从零玩转RGB人脸活体检测 前言 本期教程人脸识别第三方平台为虹软科技,本文章讲解的是人脸识别RGB活体追踪技术,免费的功能很多可以自行搭配,希望在你看完本章课程有所收获。 ArcFace 离线SDK...
Java

设计模式之模板方法模式

在我们的实际开发中,如果一个方法非常复杂,如果我们把所有的逻辑都写在一个方法中,维护起来非常困难,当我们想要替换它们的时候,我们必须重写一些步骤,所以代码的可扩展性很差。当你遇到这种情况时,你应该考虑...
Java

微服务入门之Hystrix

一、分布式系统面临的问题 复杂分布式体系结构中的应用程序有几十个依赖项,每个依赖项在某个时候都会不可避免地失败。[En]An application in a complex distributed ...
Java

图像通道、RGB与色彩体系

通道(Channels) 图像的通道指的是什么?是不是灰度图的通道数为1,彩色图的通道为3 ? 图像通道&...
Java

docker安装Kafka(windows版)

windows环境安装docker参考安装docker桌面版(Windows) 这一步如果出现报错的话可以直接输入wsl -l -v命令来查看当前Ubuntu的wsl版本 安装Kafka需要先安装 z...