一天学一个模式_第一天:策略模式
概念:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable.
Strategy lets the algorithm vary independently from clients that use it.)
抽象策略角色:
策略类,通常由一个接口或者抽象类实现。
步骤:
(①②步比较菜,忽略。有异议者联系!)
①首先定义一个策略接口
②然后再写出你需要的实现类(这里称为“计谋”)去继承①策略接口。
③计谋有了,那还要有锦囊装
/**
* @author wonter
* <b>描述:</b>计谋有了,那还要有锦囊装 <br>
* <b>邮件:</b> yiyu1@163.com <br>
*/
public class Box {
//①策略接口
private IStrategy straegy;
//向锦囊中传入计谋
//这里类型是策略IStrategy接口,但传入的则是“实现”接口的计谋。
public Box(IStrategy jimou){
//改写策略
this.straegy = jimou;
}
//使用计谋
public void operate(){
this.straegy.operate();
}
}
④使用计谋
/**
* @author wonter
* <b>描述:</b>计谋有了,那还要有锦囊装 <br>
* <b>邮件:</b> yiyu1@163.com <br>
*/
public class YunZhao {
public static void main(String[] args) {
//将锦囊声明出来
Context context;
System.out.println("—— 锦囊妙计一 ——");
//向锦囊拿出**计谋
context = new Context(new first());
//执行计谋
context.operate();
System.out.println("—— 锦囊妙计二 ——");
//向锦囊拿出**计谋
context = new Context(new second());
//执行计谋
context.operate();
System.out.println("—— 以下待为扩展 ——");
System.out.println("—— ... .... ——");
}
好处:
这就是策略模式,高内聚低耦合的特点也表现出来了。
还有一个就是扩展性,也就是 OCP原则,只要修改 Context.java 就可以了。
提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
/**
* @author wonter
* <b>描述:</b> 一天学一个模式 更新中,请关注我的博客! <br>
* <b>博客:</b> http://www.cnblogs.com/Javame <br>
* <b>邮件:</b> yiyu1@163.com <br>
*/
加微信:wonter 发送:技术Q
医疗微信群:
加微信:wonter 发送:医疗Q
更多文章关注公众号:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效