一 策略模式 来自CBF4LIFE 的设计模式
2024-09-05 08:12:52
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,
嘿,还别说,真是解决了大问题,搞到后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子
的。
先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊
里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用 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 原则,策略类可以继续增加下,这
个不多说了,自己领会吧。
最新文章
- 直接操作 SDL_Overlay YUV叠加上的像素
- Python之路 day3 全局变量、局部变量
- 使用powerdesigner创建数据库表
- maven 的一些基本操作
- mvn export runnable jar
- pat L2-006. 树的遍历
- Number()、parseInt()、parseFloat()的区别
- MQL语句大全
- 使用 FLASH DATABASE 恢复误删除的用户
- ContextLoaderListener加载过程
- 芝麻HTTP:Flask的安装
- SSM-MyBatis-17:Mybatis中一级缓存(主要是一级缓存存在性的证明,增删改对一级缓存会造成什么影响)
- Nginx+DNS负载均衡实现
- 图解HTTP第六章
- C++拷贝构造函数(深拷贝&;浅拷贝)
- 前端MD5加密【单向加密】
- JSP报错Syntax error, insert ";;"; to complete Statement
- 16.1 用auth0服务 实现用登录和管理 使用auth版本的2个大坑。
- VC/VS2010中快捷键
- python3入门教程
热门文章
- Python中的逻辑表达式
- 使用http://start.spring.io/构建maven微服务项目的几个坑及eclipse构建spring boot微服务项目
- centos 7搭建svn+apache及权限控制
- easyexcel注解
- VS Code 调教日记(2022.6.26更新)
- JAVA中简单的for循环竟有这么多坑,你踩过吗
- vue Module parse failed: Unexpected token You may need an appropriate loader to handle this file type
- JavaWEB-03-JDBC
- @Async注解的坑,小心
- java.super详解