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

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

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

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

草船借箭

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

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

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

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

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

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

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

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

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

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

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

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

策略模式解析

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

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

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

代码实现

让我们用 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.mfbz.cn/a/773897.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python酷库之旅-第三方库Pandas(003)

目录 一、用法精讲 4、pandas.read_csv函数 4-1、语法 4-2、参数 4-3、功能 4-4、返回值 4-5、说明 4-6、用法 4-6-1、创建csv文件 4-6-2、代码示例 4-6-3、结果输出 二、推荐阅读 1、Python筑基之旅 2、Python函数之旅 3、Python算法之旅 4、Python魔法之旅 …

五.核心动画 - 图层的变换(平移,缩放,旋转,3D变化)

引言 在上一篇博客中,我们研究了一些视觉效果,在本篇博客中我们将要来讨论一下图层的旋转,平移,缩放,以及可以将扁平物体转换成三维空间对象的CATransform3D。 图层变换 图层的仿射变换 在视图中有一个transform属…

海外发稿: 秘鲁-区块链新闻媒体通稿宣发

秘鲁媒体单发 随着全球化的不断深入,海外发稿已经成为众多企业宣传推广的重要方式之一。而在海外发稿的选择中,秘鲁媒体的地位尤为重要。秘鲁作为南美洲的重要国家之一,拥有众多知名媒体平台,包括diariodelcusco、serperuano、el…

全网视频下载之IDM下载安装,软破解

全网视频下载之IDM下载安装,软破解 介绍![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c94f612f7a8845c8a649f74f6b18fd70.png)下载安装配置浏览器Google浏览器Ddge浏览器 界面如何下载不破解如何重复使用总结 介绍 今天给大家分享一个更加简便的全网视…

nftables(1)基本原理

简介 nftables 是 Linux 内核中用于数据包分类的现代框架,用来替代旧的 iptables(包括 ip6tables, arptables, ebtables 等,统称为 xtables)架构。nftables 提供了更强大、更灵活以及更易于管理的规则集配置方式,使得…

【matlab】智能优化算法——求解目标函数

智能优化算法在求解目标函数方面发挥着重要作用,它通过迭代、筛选等方法来寻找目标函数的最优值(极值)。以下是关于智能优化算法求解目标函数的详细介绍: 一、智能优化算法概述 智能优化算法是一种搜索算法,旨在通过…

0/1背包问题总结

文章目录 🍇什么是0/1背包问题?🍈例题🍉1.分割等和子集🍉2.目标和🍉3.最后一块石头的重量Ⅱ 🍊总结 博客主页:lyyyyrics 🍇什么是0/1背包问题? 0/1背包问题是…

《简历宝典》02 - 如果你是HR,你会优先打开哪份简历?

现在的求职环境不必多说,其实我们大家都还是很清楚的。所以,在这个环境下,写一份优秀的简历,目的与作用也不必多说。那么,这一小节呢,我们先从简历这份文档的文档名开始说起。 目录 1 你觉得HR们刷简历的时…

【SVN的使用-源代码管理工具-命令行的使用 Objective-C语言】

一、接下来,我们来说一个终端的命令行的使用, 1.我们说,你的电脑里边呢,有终端, 在Mac里边,你想新建一个txt,应该怎么写,对,打开文本编辑, 打开这个东西,写点儿东西,然后保存一下,保存的时候,你还要去选择格式, 现在,如果我们用命令行,可以更方便一些, 2.首…

企业用私户发工资算不算偷税?

一般来说,给员工发工资都是用企业的对公账户去发,但是,有的企业会用私户去发工资,早前就有蜜雪冰城股东用私户给员工发奖金被税局稽查,最终补缴个税近800万的新闻,可见,私户发工资是具有很大风险…

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

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

底层软件 | 十分详细,为了学习设备树,我写了5w字笔记!

0、设备树是什么?1、DTS 1.1 dts简介1.2 dts例子 2、DTC(Device Tree Compiler)3、DTB(Device Tree Blob)4、绑定(Binding)5、Bootloader compatible属性 7、 #address-cells和#size-cells属性8…

Qt源码解析之QObject

省去大部分virtual和public方法后,Qobject主要剩下以下成员: //qobject.h class Q_CORE_EXPORT Qobject{Q_OBJECTQ_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged)Q_DECLARE_PRIVATE(QObject) public:Q_I…

印章谁在管、谁用了、用在哪?契约锁让您打开手机一看便知

“印章都交给谁在管”、“哪些人能用”、“都有哪些业务在用”…这些既是管理者最关心的印章问题也是影响印章安全的关键要素。但是公司旗下分子公司那么多,各类公章、法人章、财务章、合同章一大堆,想“问”明白很难。 契约锁电子签及印控平台推出“印章…

OpenLayers使用2

接着上一篇https://blog.csdn.net/weixin_51416826/article/details/140161160?spm1001.2014.3001.5502 本篇主要内容是基于高德API逆向地址解析获取城市中心点,并且设置了输入框,可以输入城市执行飞行,同时基于高德API获取城市天气信息&am…

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

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

Leaflet【六】绘制交互图形、测量、经纬度展示

本文主要探讨了如何利用leaflet-draw插件在地图上绘制图形,以及通过leaflet-measure测量距离和面积,并将经纬度绘制到地图上。首先,我们使用leaflet-draw插件,该插件提供了一种简单而直观的方式来绘制各种形状(如点、线…

配置基于不同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…

Restore Equipment

Restore Equipment 魔兽世界 - 盗号申请 - 恢复装备流程 魔兽和网易真的不行啊 1&#xff09;这个装备本来就是兑换的竟然可以卖NPC 2&#xff09;针对这个情况竟然无法挽回 3&#xff09;设计理念真的不得不吐槽一下 4&#xff09;策划真的不咋样&#xff0c;要是有机会我要自…

STM32F1+HAL库+FreeTOTS学习5——内核中断管理及中断控制函数

STM32F1HAL库FreeTOTS学习5——中断管理和临界段代码保护 中断简介中断优先级寄存器拓展FreeRTOS中PendSV和Systick中断优先级配置三个中断屏蔽寄存器FreeRTOS中断管理函数代码验证 上一期我们学习了FreeRTOS中任务挂起与恢复&#xff0c;在中断服务程序中恢复任务过程中&#…