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

三个妙计是同一类型的东东,那咱就写个接口:  Istrategy

package Strategy_pattern;

/**
* @author lhb
* @类名 Istrategy
* @描述 策略接口 首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口 
* @时间 2022/4/25 13:43
* @版本
**/
public interface Istrategy {
/**
* 每个策略执行一个方法
*/
public void operate();
}

妙计三

package Strategy_pattern;

/**
* @author lhb
* @类名 ThreeStrtegy
* @描述 孙夫人断后,挡住追兵
* @时间 2022/4/25 13:47
* @版本
**/
public class ThreeStrtegy implements Istrategy{
@Override
public void operate() {
System.out.println("孙夫人断后,挡住追兵");
}
}

妙计二

package Strategy_pattern;

/**
* @author lhb
* @类名 secondStrategy
* @描述 求吴国太开个绿灯
* @时间 2022/4/25 13:46
* @版本
**/
public class secondStrategy implements Istrategy{
@Override
public void operate() {
System.out.println("求吴国太开个绿灯,放行!");
}
}

妙计一

package Strategy_pattern;

/**
* @author lhb
* @类名 FristStrategy
* @描述 找乔国老帮忙,使孙权不能杀刘备
* @时间 2022/4/25 13:45
* @版本
**/
public class FristStrategy implements Istrategy{
@Override
public void operate() {
System.out.println("找乔国老帮忙,让吴国太给孙权施加压力");
}
}

好了,大家看看,三个妙计是有了,那需要有个地方放这些妙计呀,放锦囊呀:

package Strategy_pattern;
/**
* @author lhb
* @类名 Context
* @描述 计谋有了,那还要有锦囊
* @时间 2022/4/25 13:58
* @版本
**/
public class Context {
private Istrategy strategy; /**
* 构造函数,你要使用那个妙计
* @param strategy
*/
public Context(Istrategy strategy){
this.strategy = strategy;
}
/**
* 使用计谋了,看我出招了
*/ public void operator(){
this.strategy.operate();
}
}

然后就是赵云雄赳赳的揣着三个锦囊,拉着已步入老年行列的、还想着娶纯情少女的、色迷迷的刘老
爷子去入赘了,嗨,还别说,小亮的三个妙计还真是不错,瞅瞅:

package Strategy_pattern;

/**
* @author lhb
* @类名 ZhaoYunMain
* @描述 赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计
* @时间 2022/4/25 14:10
* @版本
**/ public class ZhaoYunMain {
public static void main(String[] args) {
System.out.println("-----------刚刚到吴国的时候拆第一个-------------");
//才开执行
new Context(new FristStrategy()).operator(); System.out.println("-----------刘备乐不思蜀了,拆第二个了-------------");
new Context(new secondStrategy()).operator();
//孙权的小兵追了,咋办?拆第三个
System.out.println("-----------孙权的小兵追了,咋办?拆第三个 -------------");
new Context(new ThreeStrtegy()).operator(); System.out.println("-----------最后周瑜配了夫人又折兵!!! -------------");
}
}

策略模式的好处就是:体现了高内聚低耦合的特性呀,缺点嘛,每一种策略都需要封装成一个类,可能会存在较多的策略类。 这也不叫缺点吧.

应用场景:  游戏在不同的场景或者策略下释放不同的技能.

就这三招,搞的周郎是“陪了夫人又折兵”呀!这就是策略模式,高内聚低耦合的特点也表现出来了,
还有一个就是扩展性,也就是 OCP 原则,策略类可以继续增加下,这
个不多说了,自己领会吧。

一 策略模式 来自CBF4LIFE 的设计模式的更多相关文章

  1. 策略模式------《Head First 设计模式》

    第一章---策略模式 xzmxddx 学习方式:书籍<Head First 设计模式>,这本书通俗易懂,所有知识点全部取自本书. 面向对象设计原则 封装变化 多用组合,少用继承 针对接口编 ...

  2. 六 抽象工厂模式【Abstract Factory Pattern】 来自CBF4LIFE 的设计模式0

    好了,我们继续上一节课,上一节讲到女娲造人,人是造出来了,世界时热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,Shit!忘记给人类 ...

  3. 四 多例模式【Multition Pattern】 来自CBF4LIFE 的设计模式

    出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的地盘,国号不同.大家还记得那首诗<石灰吟>吗?作者是谁?于谦,他是被谁杀死的?明英宗朱祁镇,对,就是那个在土木堡之变中被瓦刺俘虏的皇 ...

  4. 五 工厂方法模式【Factory Method Pattern】 来自CBF4LIFE 的设计模式

    女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是"造人"的工作,这个词被现代人滥用了.这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛 ...

  5. 二 代理模式【Proxy Pattern】 来自CBF4LIFE 的设计模式

    什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀. ...

  6. 三 单例模式【Singleton Pattern】  来自CBF4LIFE 的设计模式

    这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,单例就是单一.独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?我们举个比较难复制的 ...

  7. 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...

  8. 设计模式:Strategy 策略模式 -- 行为型

    设计模式 策略模式Strategy(对象行为型) 这是几年前写的文字(转载做的笔记更准确些),发觉还是废话多了点. 其实,核心就是5.结构中的UML图 5.1 和 5.2(新增).现在看这张图就觉得一 ...

  9. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

随机推荐

  1. 「快速学习系列」我熬夜整理了Vue3.x响应性API

    前言 Vue3.x正式版发布已经快半年了,相信大家也多多少少也用Vue3.x开发过项目.那么,我们今天就整理下Vue3.x中的响应性API.响应性APIreactive 作用: 创建一个响应式数据. ...

  2. SAP SD-Invoice 销售发票

    针对销售订单的发票流程: 1. 事务码:VF01(个别生成系统发票) 创建开票凭证(发票)/  VF04 开具系统发票(可把多个item 合并成一张系统发票) 2. 事务码:VF02 修改发票, 释放 ...

  3. 如何获取GC(垃圾回收器)的STW(暂停)时间?

    前言 在现代的容器化和微服务应用中,因为分布式的环境和错综复杂的调用关系,APM(Application Performance Monitoring 应用性能监控)显得尤为重要,它通过采集应用程序各 ...

  4. JAVA设计模式总结—建造者模式

    建造者模式 模式动机与定义 ​ 首先建造者模式的动机是为了创建复杂对象,简化传统的创建方法,提高创建的效率和可读性. ​ 像图中的这个例子,用户的需求是驾驶一辆汽车,但是对于用户来说是不需要了解汽车装 ...

  5. bat-静默安装并配置mysql(windows版)

    mysql版本 mysql-5.6.35-winx64 路径关系 @echo off Setlocal enabledelayedexpansion @REM vscode中自动开启延迟环境变量扩展, ...

  6. OneOS下调试支持的几种方式

    方法论 当我们遇到问题,应该怎么办?这不仅应用于程序开发,也是我们在生活中遇到问题的时候,应该想的事儿,怎么办!趁着此次机会,我好好想了七秒钟. 先问是不是问题,如果不是就不用解决了 如果确实是问题, ...

  7. Java 中的对象池实现

    点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 最近在 ...

  8. Ubuntu出现视频无法正常播放的问题

    原因是没有安装相关的解码包,参考这个方法: ubuntu下B站(bilibili)视频无法播放 一条命令解决 sudo apt install ubuntu-restricted-extras 要是有 ...

  9. ooday08 Java_多态_向下强制转型

    笔记: 多态: 表现: 同一个对象被造型为不同的类型时,有不同的功能 --对象的多态:我.你.水......------所有对象都是多态的(明天体会) 同一类型的引用指向不同的对象时,有不同的实现 - ...

  10. 多校B层冲刺NOIP20211110 字符配对游戏

    原题 问题描述 操场边,运动会没有项目的同学也没闲着,经过几天的研究,他们发明了一个很有意思的字符串配对游戏,两位同学准备两张白纸,第一个同学在纸上写一个整数N和一个由小写字母组成的字符串S,将S重复 ...