“谋士三国”诸葛亮的锦囊妙计 - 策略模式

news2024/11/18 20:22:25

“当代码如三国,智慧如孔明,何愁天下设计不归一统?”

乱世之中,英雄辈出。三国的战场上,不仅刀光剑影,更有智慧的较量。诸葛亮的锦囊妙计,不正是今日软件设计中策略模式的完美写照吗?让我们穿越时空,从一场惊心动魄的草船借箭开始,揭开策略模式的神秘面纱。

赤壁江边战鼓鸣,
孔明妙计借东风。
三个锦囊藏妙算,
草船借箭显神通。

草船借箭

江面上,浓雾弥漫。一支奇怪的船队缓缓驶来,船上不见一个士兵,只有稻草扎成的人偶随风摇晃。站在船头的,是一位手摇羽扇、神情自若的年轻文士——诸葛亮。

"军师,这真的能行吗?"刘备担忧地问道。

诸葛亮微微一笑,“主公放心,三个锦囊在此,万无一失。”

第一个锦囊打开:摆草船、张白帆。
大船缓缓驶近曹营,雾气中忽隐忽现的白帆引起了曹军的注意。

"敌袭!"曹营中一片惊呼。

"放箭!"曹操一声令下,万箭齐发。

诸葛亮打开第二个锦囊:鸣锣击鼓。
船上顿时锣鼓喧天,喊杀声四起,仿佛千军万马正在进攻。曹军更加惊慌,箭如雨下。

"军师,船上的箭够多了,我们该撤了!"周瑜急切地说。

诸葛亮悠然打开第三个锦囊:快速撤退。
船队迅速掉头,在曹军还没反应过来之际,已消失在迷雾中。

当晨雾散去,刘备军的士兵们惊喜地发现,船上竟密密麻麻插满了箭,足够武装千军万马!

"妙啊!"刘备不禁赞叹,“军师这三个锦囊,真是神机妙算!”

诸葛亮捋须微笑,“主公过奖了。这不过是根据不同情况,准备了不同的策略罢了。”

策略模式解析

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

诸葛亮的三个锦囊,正是策略模式的绝佳示例。在软件工程中,策略模式允许我们定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。

让我们用一个类图来理解策略模式的结构:
在这里插入图片描述

代码实现

让我们用 Java 来重现这个智取箭矢的场景:

// 策略接口
interface BorrowArrowStrategy {
    void execute();
}

// 具体策略:摆草船、张白帆
class BoatStrategy implements BorrowArrowStrategy {
    public void execute() {
        System.out.println("摆开草船,张起白帆,静待曹军放箭。");
    }
}

// 具体策略:鸣锣击鼓
class DrumStrategy implements BorrowArrowStrategy {
    public void execute() {
        System.out.println("鸣锣击鼓,制造我军进攻的假象。");
    }
}

// 具体策略:快速撤退
class RetreatStrategy implements BorrowArrowStrategy {
    public void execute() {
        System.out.println("箭矢已满,快速撤离战场。");
    }
}

// 锦囊:策略的执行者
class StrategicPlan {
    private BorrowArrowStrategy strategy;

    public void setStrategy(BorrowArrowStrategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy() {
        strategy.execute();
    }
}

// 诸葛亮:策略的使用者
class ZhuGeLiang {
    private StrategicPlan plan = new StrategicPlan();

    public void borrowArrows() {
        System.out.println("诸葛亮:开始执行草船借箭计划!");

        plan.setStrategy(new BoatStrategy());
        plan.executeStrategy();

        plan.setStrategy(new DrumStrategy());
        plan.executeStrategy();

        plan.setStrategy(new RetreatStrategy());
        plan.executeStrategy();

        System.out.println("诸葛亮:草船借箭计划圆满成功!");
    }
}

// 主类
public class StrategyPatternDemo {
    public static void main(String[] args) {
        ZhuGeLiang kongming = new ZhuGeLiang();
        kongming.borrowArrows();
    }
}

运行结果

诸葛亮:开始执行草船借箭计划!
摆开草船,张起白帆,静待曹军放箭。
鸣锣击鼓,制造我军进攻的假象。
箭矢已满,快速撤离战场。
诸葛亮:草船借箭计划圆满成功!

策略模式的妙用

通过这个例子,我们可以看到策略模式的几个关键优点:

  1. 灵活性:诸葛亮可以根据战况随时更换策略,就像我们可以轻松切换不同的算法。
  2. 可扩展性:如果有新的借箭策略,我们只需添加新的策略类,而不需要修改现有代码。
  3. 简化了复杂的条件判断:不同的策略被封装在不同的类中,避免了复杂的 if-else 结构。

结语

诸葛亮的锦囊妙计不仅智取了曹操的箭矢,也为我们揭示了策略模式的精髓。在软件开发中,我们同样可以像诸葛亮一样,将不同的算法封装成策略,以应对变幻莫测的需求变化。

正所谓"运筹帷幄之中,决胜千里之外",掌握了策略模式,我们就能在软件架构的战场上,游刃有余,所向披靡。

下一章,我们将继续探索三国中的其他奇策妙计,揭示更多精彩的设计模式。敬请期待!

参考原文:https://offernow.cn
AI学习助手:https://aistar.cool

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1896654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五、框架实战:SSM整合原理和实战-个人版

五、框架实战:SSM整合原理和实战 文章目录 五、框架实战:SSM整合原理和实战一、SSM整合理解1.1 什么是SSM整合?1.2 SSM整合核心问题明确1.2.1 第一问:SSM整合需要几个IoC容器?1.2.2 第二问:每个IoC容器对应…

数据结构预科

在堆区申请两个长度为32的空间,实现两个字符串的比较【非库函数实现】 要求: 1> 定义函数,在对区申请空间,两个申请,主函数需要调用2次 2> 定义函数,实现字符串的输入,void input(char …

深度学习 --- stanford cs231学习笔记八(训练神经网络之dropout)

6,dropout 6,1 线性分类器中的正则化 在线性分类器中,我们提到过正则化,其目的就是为了防止过度拟合。例如,当我们要用一条curve去拟合一些散点的数据时,常常是不希望训练出来的curve过所有的点&#xff0c…

【C#】ProgressBar进度条异步编程思想

1.控件介绍 进度条通常用于显示代码的执行进程进度,在一些复杂功能交互体验时告知用户进程还在继续。 在属性栏中,有三个值常用: Value表示当前值,Minimum表示进度条范围下限,Maximum表示进度条范围上限。 2.简单实…

探索人工智能在电子商务平台与游戏发行商竞争中几种应用方式

过去 12 年来,电脑和视频游戏的发行策略发生了巨大变化。数字游戏的销量首次超过实体游戏的销量 在20132020 年的封锁进一步加速了这一趋势。例如,在意大利,封锁的第一周导致数字游戏下载量 暴涨174.9%. 展望未来,市场有望继续增…

配置基于不同IP地址的虚拟主机

定义配置文件vhost.conf <directory /www> allowoverride none require all granted </directory> <virtualhost 192.168.209.136:80> documentroot /www servername 192.168.209.136 </virtualhost><virtualhost 192.168.209.138:80> document…

电阻负载柜或无功负载组?

选择正确电源测试解决方案的快速指南 如果您在市场上寻找负载组&#xff0c;您无疑会遇到电阻式和反应式这两个术语。为了使负载组规范尽可能简单&#xff0c;您需要了解不同类型的负载测试解决方案之间的区别&#xff0c;以及哪种解决方案最适合您的应用。 什么是电阻负载组&…

AntDesign上传组件upload二次封装+全局上传hook使用

文章目录 前言a-upload组件二次封装1. 功能分析2. 代码详细注释3. 使用到的全局上传hook代码4. 使用方式5. 效果展示 总结 前言 在项目中&#xff0c;ant-design是我们常用的UI库之一&#xff0c;今天就来二次封装常用的组件a-upload批量上传组件,让它用起来更方便。 a-uploa…

Gartner发布软件供应链安全指南:软件供应链攻击造成的损失将从 2023 年的460亿美元上升到2031年的1380亿美元

软件供应链安全是一个关键的风险和合规性问题&#xff0c;但大多数组织都以分散的方式处理它。缺乏一个包罗万象的框架会遗留安全漏洞。通过实施三支柱框架&#xff0c;安全和风险管理领导者可以确保广泛的保护。 主要发现 对软件供应链的攻击给组织带来重大的安全、监管和运营…

Twitter群发消息API接口的功能?如何配置?

Twitter群发消息API接口怎么申请&#xff1f;如何使用API接口&#xff1f; 为了方便企业和开发者有效地与用户互动&#xff0c;Twitter提供了各种API接口&#xff0c;其中Twitter群发消息API接口尤为重要。AokSend将详细介绍Twitter群发消息API接口的功能及其应用场景。 Twit…

船舶雷达与导航中M7/8防水插座应用优势

船舶雷达与导航系统是船舶安全航行的重要组成部分&#xff0c;而7/8防水插座在这些系统中起着至关重要的作用。其中防水MIN-change 7/8"航空法兰插座成型预铸电缆式、组装式、面板式法兰座、T-型三通可选 7/8防水插座的电气性能 7/8防水插座因其优良的电气性能而被广泛应…

【matlab 路径规划】基于改进遗传粒子群算法的药店配送路径优化

一 背景介绍 本文分享的是一个基于订单合并的订单分配和路径规划联合优化&#xff0c;主要背景是骑手根据客户需求&#xff0c;从药店取药之后进行配送&#xff0c;配送的过程中考虑路径的长度、客户的服务时间窗、车辆的固定成本等要素&#xff0c;经过建模和优化得到最优的配…

收银系统源码-营销活动-幸运抽奖

1. 功能描述 营运抽奖&#xff1a;智慧新零售收银系统&#xff0c;线上商城营销插件&#xff0c;商户/门店在小程序商城上设置抽奖活动&#xff0c;中奖人员可内定&#xff1b; 2.适用场景 新店开业、门店周年庆、节假日等特定时间促销&#xff1b;会员拉新&#xff0c;需会…

【漏洞复现】万户协同办公平台——反序列化

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 万户协同办公平台ezEIP是一个综合信息基础应用平台&#xff0c;…

14-11 2024 年的 13 个 AI 趋势

2024 年的 13 个 AI 趋势 人工智能对环境的影响和平人工智能人工智能支持的问题解决和决策针对人工智能公司的诉讼2024 年美国总统大选与人工智能威胁人工智能、网络犯罪和社会工程威胁人工智能治疗孤独与对人工智能的情感依赖人工智能影响者中国争夺人工智能霸主地位人工智能…

上海时尚新品发布会,可以邀请哪些媒体

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 在上海举办时尚新品发布会时&#xff0c;可以邀请的媒体类型多样&#xff0c;以下是一些建议的媒体类型及其特点&#xff1a; 一、平面媒体 报纸&#xff1a; 《文汇报》&#xff1a;上…

【带你全面了解 RAG,深入探讨其核心范式、关键技术及未来趋势】

文末有福利&#xff01; 大型语言模型&#xff08;LLMs&#xff09;已经成为我们生活和工作的一部分&#xff0c;它们以惊人的多功能性和智能化改变了我们与信息的互动方式。 然而&#xff0c;尽管它们的能力令人印象深刻&#xff0c;但它们并非无懈可击。这些模型可能会产生…

python-图像旋转(赛氪OJ)

[题目描述] 输入一个 n 行 m 列的黑白图像&#xff0c;将它顺时针旋转 9090 度后输出。输入&#xff1a; 第一行包含两个整数 n 和 m&#xff0c;表示图像包含像素点的行数和列数。1≤n≤100&#xff0c;1≤m≤100。 接下来 n 行&#xff0c;每行 m 个整数&#xff0c;表示图像…

【FreeRTOS】同步与互斥通信-有缺陷的互斥案例

目录 同步与互斥通信同步与互斥的概念同步与互斥并不简单缺陷分析汇编指令优化过程 - 关闭中断时间轴分析 思考时刻 参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 同步与互斥通信 同步与互斥的概念 一句话理解同步与互斥&#xff1a;我等你用完厕所&#xff0c;我再…