
24种设计模式——策略模式
高内聚低耦合:策略类之间通过接口进行通信,系统各部分之间的耦合度降低,系统的模块化程度提高。 易于扩展:只需新增策略类即可增加新的功能,系统具有良好的扩展性。 策略接口(Strategy):定义所有策略类必须实现的公共方法。 具体策略类(ConcreteStrategy):实现策略接口的具体算法类,每个策略类代表一种特定的解决方案。 上下文(Context):负责选择并执行当前需要使用的策略类。 到吴国时使用 BackDoor:通过找乔国老帮助,确保孙权无法对刘备构成威胁。 刘备到达孟州后使用 GivenGreenLight:通过求得吴国太的支持,顺利通过关卡。 孙权小兵追来时使用 BlockEnemy:由孙夫人断后,阻挡追兵。
发布日期:2021-05-08 00:09:09
浏览次数:16
分类:精选文章
本文共 1448 字,大约阅读时间需要 4 分钟。
策略模式(Strategy Pattern)是软件设计中的一个常用模式,旨在管理一组算法或行为,使其能够在运行时灵活切换。这个概念可以通过刘备前往江东娶妻的故事来生动说明。
在这个故事中,诸葛亮为赵云提供了三个锦囊妙计,每个妙计都代表一种解决问题的策略。这些锦囊妙计可以看作是策略模式中的策略(Strategy),而赵云则作为策略执行器(Executor)来执行这些策略。
概念介绍
策略模式的核心思想是通过定义一系列独立的策略类,每个策略类代表一种解决问题的方式。系统可以通过选择不同的策略类来实现不同的行为或逻辑。这种方式具有以下优势:
技术实现
为了实现策略模式,我们可以创建以下组件:
代码示例
package com.cbf4life.strategy;public interface IStrategy { void operate();}
package com.cbf4life.strategy;public class BackDoor implements IStrategy { public void operate() { System.out.println("找乔国老帮忙,让吴国太给孙权施加压力"); }}public class GivenGreenLight implements IStrategy { public void operate() { System.out.println("求吴国太开个绿灯,放行!"); }}public class BlockEnemy implements IStrategy { public void operate() { System.out.println("孙夫人断后,挡住追兵"); }}
package com.cbf4life.strategy;public class Context { private IStrategy strategy; public Context(IStrategy strategy) { this.strategy = strategy; } public void operate() { strategy.operate(); }}
应用场景
赵云在帮助刘备前往江东娶妻的过程中,依次使用了诸葛亮提供的三个锦囊妙计:
这种策略模式的应用充分体现了高内聚低耦合的优势,系统各部分之间的依赖关系清晰明确。同时,通过上下文类的设计,系统可以灵活切换策略,提升了系统的扩展性和可维护性。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月28日 11时29分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
@SuppressWarnings 用法
2019-03-06
看完你就明白的锁系列之锁的状态
2019-03-06
看完这篇操作系统,和面试官扯皮就没问题了
2019-03-06
我的价值观
2019-03-06
真香!Linux 原来是这么管理内存的
2019-03-06
一文详解 Java 并发模型
2019-03-06
阅站无数!不过我只推荐下面这些
2019-03-06
值类型与引用类型(中)
2019-03-06
MSSQL 2005 数据库变成可疑状态
2019-03-06
QBlog V2.5 源码开放下载(ASP.NET 番外系列之开端)
2019-03-06
秋色园引发CPU百分百命案的事件分析与总结
2019-03-06
安装jdk并配置环境变量
2019-03-06
稀疏数组
2019-03-06
js的严格模式
2019-03-06
ETL工具-KETTLE教程实例实战1----术语和定义
2019-03-06
idea的安装和无限期试用
2019-03-06
Oracle VM VirtualBox安装PVE虚拟机
2019-03-06
【转】如何用css限制文字长度,使溢出的内容用省略号…显示
2019-03-06
Android MediaPlayer setDataSource failed
2019-03-06