11-设计模式——策略模式
设计模式——策略模式
策略模式 ==> Strategy
模式定义:
定义了算法簇,分别封装起来,让它们之间可以互相替换,此模式的变化独立于算法的使用者
策略模式可以让算法独立于使用它的客户端
Class Diagram
- Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。
- Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。
package com.example.designpatterns.strategy; import org.yaml.snakeyaml.DumperOptions; /** * @program: DesignPatterns * @description: 策略模式 * @author: Coder_Pan * @create: 2022-04-13 17:13 * * 设计一个鸭子,它可以动态地改变叫声 * 这里的算法族是鸭子的叫声行为 **/ public class StrategyTest { public static void main(String[] args) { System.out.println("策略模式......"); Duck duck = new Duck(); duck.setQuackBehavior(new Squeak()); duck.performQuack(); /** * 能动态地改变 Context 所使用的算法 */ duck.setQuackBehavior(new Quack()); /** * doSomething() 方法会调用 behavior() */ duck.performQuack(); } } /** * 定义鸭子叫的接口 */ interface QuackBehavior{ /** * 鸭子叫声 */ void quack(); } /** * 实现 ====> Behavior */ class Quack implements QuackBehavior { @Override public void quack() { System.out.println("quack!"); } } /** * 实现 ====> Behavior */ class Squeak implements QuackBehavior{ @Override public void quack() { System.out.println("squeak!"); } } /** * 定义一只鸭子 */ class Duck { private QuackBehavior quackBehavior; /** * doSomething() 方法会调用 behavior() */ public void performQuack() { if (quackBehavior != null) { quackBehavior.quack(); } } /** * setStrategy(Strategy) 方法可以**动态**地改变 strategy 对象 * 能动态地改变 Context 所使用的算法 * * @param quackBehavior */ public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; } }
posted on 2022-04-13 17:27 JavaCoderPan 阅读(14) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南