设计模式-1 策略模式

本文介绍了如何使用策略模式在SimuDuck系统中实现不同鸭子行为的替换,避免了代码冗余和固定行为。通过接口和组合,实现了行为的动态调整,遵循了面向对象设计原则和组合优于继承的原则。

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

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

实列
需要创建一个SimuDuck系统,模仿各种不同鸭子。不同种类的鸭子通常具有不同的外观,飞行,发声及游泳方式。
最初的实现:
原始实现
因为不同类型的鸭子飞行和发声行为不同,绿头鸭和红头鸭会飞,橡皮鸭不会飞也不会叫,如果通过继承来对每一个具体类都重写这些方法造成的问题有:
1.代码在多个子类重复;
2.运行时无法改变子类的行为;
每个子类都重写fly和quack,有时鸭子不具有该行为,但也要重写。

使用策略模式的实现:
策略模式实现
通过使用组合(“has a”, not “is a”)的方式,将飞行和发声委托给其他类(一组算法),本身只含有这些类的接口类。

这样的设计遵循了3个原则:
1.找出代码中会变化的部分,封装起来,让不变的部分尽量不受影响;
2.针对接口编程,而不是针对实现编程;
3.多用组合,少用继承。

现在的Duck类中,performQuack和performFly,以及flyBehavior, quackBehavior都是固定的接口,通过不同的实例来实现不同的操作,减少对客户端代码的改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值