策略模式【Strategy Pattern】

刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,
嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子
的。
1
先说这个场景中的要素:
  1. 三个妙计
  2. 一个锦囊
  3. 一个赵云
妙计是小亮同志给的,妙计是放置在锦囊
里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用 JAVA 程序
怎么表现这个呢?我们先看类图:

 代码实现

(1)编写3个妙计

定义妙计策略接口 

package strategy;/*** 策略接口:妙计** 锦囊一:到达东吴,先去拜会乔国老;锦囊二:刘备贪念美色不思离开,就对他谎称曹操大军压境;锦囊三:如果被东吴军队追赶,求孙夫人解围。** @author 1*/
public interface IStrategy {/*** 锦囊妙计*/public void operate();
}
package strategy;/*** 第一个锦囊** @author 1* @version 1.0* @description: TODO* @date 2023/8/9 17:02*/
public class FirstMethod implements IStrategy {@Overridepublic void operate() {System.out.println("锦囊一:到达东吴,先去拜会乔国老.");}
}
package strategy;/*** 第二个锦囊** @author 1* @version 1.0* @description: 第二个锦囊* @date 2023/8/9 17:04*/
public class SecondMethod implements IStrategy {@Overridepublic void operate() {System.out.println("锦囊二:刘备贪念美色不思离开,就对他谎称曹操大军压境.");}
}
package strategy;/*** @author 1* @version 1.0* @description: TODO* @date 2023/8/9 17:07*/
public class ThirdMethod implements IStrategy {@Overridepublic void operate() {System.out.println("锦囊三:如果被东吴军队追赶,求孙夫人解围.");}
}

(2)编写锦囊

package strategy;/*** 锦囊** @author 1* @version 1.0* @description: TODO* @date 2023/8/9 17:08*/
public class Context {private IStrategy strategy;public Context(IStrategy strategy) {this.strategy = strategy;}/*** 使用锦囊*/public void operate() {this.strategy.operate();}
}

(3)编写赵云(使用锦囊的人)有兴趣可以看两种调用方法,没兴趣看第一个就行

package strategy;/*** @author 1* @version 1.0* @description: TODO* @date 2023/8/9 16:59*/
public class ZhaoYun {/***方法一:* @param args*/public static void main(String[] args) {Context context;//1.赵云到吴国拿出第一个锦囊context = new Context(new FirstMethod());context.operate();//2.刘备不想走,拿出第二个锦囊context = new Context(new SecondMethod());context.operate();//3.孙权有追兵,拿出第三个锦囊context = new Context(new ThirdMethod());context.operate();}/**方法二:条件封装,因为需要new的三个妙计提前是知道的,可以封装到map中,依次调用* @param args*/
//    public static void main(String[] args) {
//        Map<Integer, IStrategy> map = new HashMap<Integer, IStrategy>() {{
//            put(1, new FirstMethod());
//            put(2, new SecondMethod());
//            put(3, new ThirdMethod());
//        }};
//
//        Context context;
//        //1.赵云到吴国拿出第一个锦囊
//        context = new Context(map.get(1));
//        context.operate();
//        //2.刘备不想走,拿出第二个锦囊
//        context = new Context(map.get(2));
//        context.operate();
//        //3.孙权有追兵,拿出第三个锦囊
//        context = new Context(map.get(3));
//        context.operate();
//    }}

执行结果

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(37)—— 图神经网络GNN(2)

深度学习&#xff08;37&#xff09;—— 图神经网络GNN&#xff08;2&#xff09; 这一期主要是一些简单示例&#xff0c;针对不同的情况&#xff0c;使用的数据都是torch_geometric的内置数据集 文章目录 深度学习&#xff08;37&#xff09;—— 图神经网络GNN&#xff08…

volte端到端问题分析(一)

1、MME专载保持功能验证 **描述&#xff1a;**当无线环境较差时&#xff0c;有可能由于“Radio_Connection_with_UE_Lost” 原因造成的VoLTE通话掉话&#xff0c;如果UE发生RRC重建成功&#xff0c;手机将不会掉话。 对MME1202进行功能验证&#xff1a;开启后&#xff0c;MME专…

在时间和频率域中准确地测量太阳黑子活动及使用信号处理工具箱(TM)生成广泛的波形,如正弦波、方波等研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

喜报!诚恒科技与赛时达科技达成BI金蝶云星空项目合作

随着全球数字化浪潮轰轰烈烈袭来&#xff0c;仅仅凭借手工处理的方式难以在庞大的数据海洋中精准获取信息、把握市场需求、了解目标用户&#xff0c;为企业创新提供强有力的支持。深圳赛时达科技有限公司&#xff08;简称赛时达科技&#xff09;希望通过数字化转型实现从手工处…

Blazor 调试控制台

文章目录 设置 设置 Blazor项目启动之后&#xff0c;有好几种项目设置&#xff0c;我其实想要这一种控制台 直接Console.log就行了 public void LoginBtn(){Console.WriteLine("登录");//navigationManager.NavigateTo("/index");}

Unity-Linux部署WebGL项目MIME类型添加

在以往的文章中有提到过使用IIS部署WebGL添加MIME类型使WebGL项目在浏览器中能够正常加载&#xff0c;那么如果咱们做的是商业项目&#xff0c;往往是需要部署在学校或者云服务器上面的&#xff0c;大部分情况下如果项目有接口或者后台管理系统&#xff0c;后台基本都会使用Lin…

数据结构(一):顺序表详解

在正式介绍顺序表之前&#xff0c;我们有必要先了解一个名词&#xff1a;线性表。 线性表&#xff1a; 线性表是&#xff0c;具有n个相同特性的数据元素的有限序列。常见的线性表&#xff1a;顺序表、链表、栈、队列、数组、字符串... 线性表在逻辑上是线性结构&#xff0c;但…

2021年09月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:数字判断 输入一个字符,如何输入的字符是数字,输出yes,否则输出no 输入 一个字符 输出 如何输入的字符是数字,输出yes,否则输出no 样例1输入 样例1输入 5 样例1输出 yes 样例2输入 A 样例2输出 no 下面是一个使用C语言编写的数字判断程序的示例代码,根据输入的字符…

(5)所有角色数据分析页面的构建-5

所有角色数据分析页面&#xff0c;包括一个时间轴柱状图、六个散点图、六个柱状图(每个属性角色的生命值/防御力/攻击力的max与min的对比)。 """绘图""" from pyecharts.charts import Timeline from find_type import FindType import pandas …

Visual Studio 2022安装教程(英文版)

文章目录 1.下载安装 1.下载 官网地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 选择第一个社区版本&#xff1a;Community 2022 安装 1.将下载好的文件保存到桌面&#xff0c;双击点开 2.等待visual studio installer配置好 3.点击安装后会来到配件选…

uniapp开发公众号,微信开发者工具进行本地调试

每次修改完内容都需要发行之后&#xff0c;再查看效果&#xff0c;很麻烦 &#xff01;&#xff01;&#xff01; 下述方法&#xff0c;可以一边在uniapp中修改内容&#xff0c;一边在微信开发者工具进行本地调试 修改hosts文件 在最后边添加如下内容 修改前端开发服务端口 …

IL汇编 ldarg 指令学习

IL汇编代码&#xff0c; .assembly extern mscorlib {} .assembly MathLib {.ver 1 : 0 : 1 : 0 }.module MathLib.dll.namespace MyMath { .class public ansi auto MathClass extends [mscorlib]System.Object{ .method public int32 GetSquare(int32) c…