
策略模式
发布日期:2021-05-16 15:24:37
浏览次数:25
分类:精选文章
本文共 2330 字,大约阅读时间需要 7 分钟。
策略模式:Java中的行为隔离与灵活性优化
策略模式(Strategy Pattern)是一种经典的设计模式,旨在将算法族封装到独立的类中,从而实现行为的替换与扩展。本文将从理论到实例,详细解析策略模式的核心思想、应用场景以及Java实现方法。
策略模式的核心思想
策略模式通过将行为封装到独立的类中,使得行为的变化与使用行为的对象解耦。具体来说:
行为的封装:将飞行(Fly)、游泳(Swim)等行为分别封装到FlyBehavior
、SwimBehavior
等接口实现类中。
行为的替换:在运行时,可以通过设置行为引用变量的值,轻松更换鸭子的行为。例如,原本的FlyNoWay
可以被FlyWithWings
替代。
行为的扩展:新增行为(如特殊飞行方式)时,只需编写相应的行为类即可,无需修改鸭子类或其它相关类。
策略模式的优点
行为与对象解耦:鸭子的行为由独立的行为类管理,鸭子类只需定义行为引用变量,行为的具体实现由外部决定。
行为的灵活性:可以在运行时动态更换鸭子的行为,例如将FlyNoWay
替换为FlyWithWings
。
可复用性:行为类可以被多个鸭子类复用,减少代码重复。
易于维护:新增行为类只需编写相应的接口实现类即可,无需修改现有鸭子类。
策略模式的设计原则
针对接口编程:行为的抽象性通过接口实现,变量声明应基于接口类型,支持多态性。
组合优先于继承:行为的组合方式比继承方式更为灵活,适合复用和动态行为替换。
动态行为替换:通过 setter 方法可以在运行时更换鸭子的行为,使系统具有较高的灵活性。
Java中策略模式的实现示例
猪鸭子与飞行行为的替换
// 鸭子接口public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public void performFly() { flyBehavior.fly(); } public void performQuack() { quackBehavior.quack(); } public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; } public abstract void display();}
具体鸭子实现
// 猪鸭子实现public class MallardDuck extends Duck { public MallardDuck() { quackBehavior = new Quack(); flyBehavior = new FlyNoWay(); } public void display() { System.out.println("我是绿鸭"); }}
飞行行为接口
// 飞行行为接口public interface FlyBehavior { void fly();}
具体飞行行为实现
// 飞行方式一:有翅膀飞行public class FlyWithWings implements FlyBehavior { public void fly() { System.out.println("实现鸭子飞行"); }}// 飞行方式二:无法飞行public class FlyNoWay implements FlyBehavior { public void fly() { System.out.println("鸭子不飞"); }}
鸣叫行为接口
// 鸣叫行为接口public interface QuackBehavior { void quack();}
鸣叫行为实现
// 鸣叫方式一:正常鸣叫public class Quack implements QuackBehavior { public void quack() { System.out.println("鸭子嘎嘎叫"); }}
运行示例
public class Main { public static void main(String[] args) { Duck duck = new MallardDuck(); duck.performFly(); // 输出: 鸭子不飞 duck.setFlyBehavior(new FlyWithWings()); duck.performFly(); // 输出: 实现鸭子飞行 }}
总结
策略模式通过将行为封装到独立的类中,使得鸭子的行为与鸭子类解耦,实现了行为的灵活替换和扩展。这一设计原则支持多用组合,少用继承,使得系统具有较高的可维护性和扩展性。在实际开发中,可以通过动态设置行为引用变量的值,轻松实现鸭子的行为切换。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月15日 11时15分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
一文理解设计模式--命令模式(Command)
2019-03-09
VTK:可视化之RandomProbe
2019-03-09
block多队列分析 - 2. block多队列的初始化
2019-03-09
Java时间
2019-03-09
不编译只打包system或者vendor image命令
2019-03-09
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
2019-03-09
flink启动(二)
2019-03-09
pair的用法
2019-03-09
Flex 布局的自适应子项内容过长导致其被撑大问题
2019-03-09
PL/SQL 动态Sql拼接where条件
2019-03-09
【换行符】什么时候用cin.get()吃掉输入流中的换行符
2019-03-09
广东外语外贸大学第三届网络安全大赛Writeup
2019-03-09
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2019-03-10
Thymeleaf sec:authorize 标签不生效
2019-03-11
微信JS-SDK DEMO页面和示例代码
2019-03-11
Flask--简介
2019-03-11
Frame--Api框架
2019-03-11
Boostrap技能点整理之【网格系统】
2019-03-11