java设计模式之——策略模式

本文深入探讨了策略模式的概念,其关键在于定义一系列算法并封装为独立的类,通过环境角色选择具体策略来避免if...else带来的复杂性。文章通过排序算法的动态选择实例,展示了策略模式的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:什么是策略模式?

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
关键代码:实现同一个接口。

二:策略模式角色

环境角色:环境角色中持有一个关于策略角色的引用,根据传入的不同策略,执行不同的操作。
抽象策略角色:一个通用的接口,只是定义需要做什么操作,并不做具体操作。
具体策略角色:一个实现了抽象策略角色的类,提供具体的执行步骤。

三:实例

第一步:我想写一个方法对任意类型的数组进行排序,这个排序方法定义好之后,排序的这个方法我不想变动了,


定义一个接口
在这里插入图片描述

对于实现了这个接口的类,都可以调用第一张图片中sort方法进行排序,我这里定义了一个Cat类,实现了上述接口
在这里插入图片描述

第二步: 第一步中我们是根据Cat的身高比较大小,现在我们想根据体重比较大小,比较方式改变了,第一步就实现不了了,因为Cat类中只能实现一种排序,不能写多种排序,要想实现对于Cat类动态的规则进行排序,怎么做呢,首先肯定 离不开多态了。接下来就要讲策略模式了。

首先 定义一个接口Comparator,让子类实现这个接口,比较规则由子类决定,
在这里插入图片描述

这是一个比较规则: 根据Cat的身高比较大小在这里插入图片描述
这是一个比较规则: 根据Cat的体重比较大小

在这里插入图片描述
之前在Cat类中,只是实现了一种比较规则,现在我们可以动态的指定比较规则,我们要实现哪种比较规则,只需要new 一个这个规则,
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值