策略模式

本文深入解析策略模式,一种设计模式,允许在运行时更改算法。通过鸭子类的实例,展示了如何封装可变行为,实现算法的独立变化,增强代码的弹性和复用性。

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

策略模式的概念

定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

我个人理解

就是把一个类(超类或者父类)中可变的行为或者状态封装起来成为一些独立的类,这样我们就能随时改变或者添加新功能而不影响父类或者超类的结构和抽象。

用例子来理解

最常见的例子是模拟鸭子,问题是这样的,现在要设计一个鸭子类,鸭子会叫会飞,那么该如何设计这样的类呢?
1.真的鸭子(会飞会叫)--------------(呱呱叫,飞很低)
2.橡皮鸭(只会叫不会飞)--------------(吱吱叫,不会飞)
3.模型鸭(不会叫也不会飞)-------------(即不会叫也不会飞)
4.等等你能想到的鸭子

我们可以看到对于不同种类的鸭子,它们的行为也是不同的,所以我们就可以将这些行为看成算法族(这些行为是可变部分),封装起来成为新的类,这样改变这些行为就不会改变到最初的鸭子类上,策略设计模式正好提供了这样的解决方案。

代码理解

1.设计抽离出来的算法类
叫的行为类
在这里插入图片描述
飞的行为类
在这里插入图片描述
2.设计鸭子类(超类)
在这里插入图片描述
3.好了,现在加入我们要来一个真鸭子,那么真会叫和飞,那么就去做具体的实现类
真鸭子叫的实现类
在这里插入图片描述
真鸭子飞的实现类
在这里插入图片描述
4.好了,真鸭子的行为类设计好了,那么该设计它本身了
在这里插入图片描述
5.写个测试类
在这里插入图片描述
6.结果
在这里插入图片描述
7.我们也可以测试一下其它的鸭子,例如模型鸭,按照上面的过程,先设计行为类,然后设计本身
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8.可以看出,我们可以很轻易的改变不同的鸭子实现不同的叫声和飞行模式,而不同修改原本的鸭子类,这里利用的就是运行时多态,所以我们能不能动态的设置不同的鸭子呢?

1.这是可以的,我们只需要在鸭子类中生成setter方法即可动态设置
在这里插入图片描述
2.现在我们来修改一下模型鸭,本来它不会飞嘛。现在需求变了,它能飞了,我们就可以利用setter方法动态改变
在这里插入图片描述
3.结果
在这里插入图片描述
4.现在针对不同的鸭子我们就可以轻易实现不同的行为,哪怕它日后突然要改变行为我们也可以实现(就是让不会飞的飞,不会叫的叫)

5.最后给出uml图,更加清晰(idea快捷键(鼠标放到包上按住ctrl+alt+u选择第一个选项))
在这里插入图片描述

总结一下,可以看出,策略模式确实扩展性很高,很有弹性,我们甚至可以在运行时改变一个类的行为,这样在开发中复用代码和创新都会很方便,但是它的缺点也明显,就是每个不同的用户或者说子类都要创建不同的行为类(算法族),而且必须知道怎么做。这里就会产生很多的类,让系统庞大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值