本文章转载大佬CBF4LIFE的文章 博客地址:https://www.cnblogs.com/cbf4life/

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

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

package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口
*
*/
public interface IStrategy { //每个锦囊妙计都是一个可执行的算法
public void operate();
} 

然后再写三个实现类,有三个妙计嘛:

package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 找乔国老帮忙,使孙权不能杀刘备
*/
public class BackDoor implements IStrategy {
public void operate() { System.out.println("找乔国老帮忙,让吴国太给孙权施加压力"); }
} 
package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 求吴国太开个绿灯
*/
public class GivenGreenLight implements IStrategy {
public void operate() { System.out.println("求吴国太开个绿灯,放行!"); }
}
package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 孙夫人断后,挡住追兵
*/
public class BlockEnemy implements IStrategy {
public void operate() { System.out.println("孙夫人断后,挡住追兵"); }
} 

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

package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 计谋有了,那还要有锦囊
*/
public class Context {
//构造函数,你要使用那个妙计
private IStrategy straegy;
public Context(IStrategy strategy){ this.straegy = strategy; } //使用计谋了,看我出招了
public void operate(){ this.straegy.operate(); }
} 

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

package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
*/
public class ZhaoYun {
/*** 赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计*/
public static void main(String[] args) { Context context; //刚刚到吴国的时候拆第一个System.out.println("-----------刚刚到吴国的时候拆第一个-------------"); context = new Context(new BackDoor()); //拿到妙计context.operate(); //拆开执行System.out.println("\n\n\n\n\n\n\n\n"); //刘备乐不思蜀了,拆第二个了System.out.println("-----------刘备乐不思蜀了,拆第二个了-------------"); context = new Context(new GivenGreenLight()); context.operate(); //执行了第二个锦囊了System.out.println("\n\n\n\n\n\n\n\n"); //孙权的小兵追了,咋办?拆第三个System.out.println("-----------孙权的小兵追了,咋办?拆第三个
-------------"); context = new Context(new BlockEnemy()); context.operate(); //孙夫人退兵System.out.println("\n\n\n\n\n\n\n\n"); /**问题来了:赵云实际不知道是那个策略呀,他只知道拆第一个锦囊,*而不知道是BackDoor这个妙计,咋办? 似乎这个策略模式已经把计谋名称写出来了** 错!BackDoor、GivenGreenLight、BlockEnemy只是一个代码,你写成first、second、
third,没人会说你错!* * 策略模式的好处就是:体现了高内聚低耦合的特性呀,缺点嘛,这个那个,我回去再查查*/}
} 

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

Java23种设计模式 策略模式【Strategy Pattern】相关推荐

  1. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  2. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  3. 设计模式——策略模式( Strategy Pattern )

    写代码超过千行,自定义类10个以上,往往写着写着就觉的乱,最终决定抽空补习下设计模式方面的知识.本来AS3出了本关于设计模式的书的,国人也翻译了.我同事也早早买了一本,但前些天我借来看了几页,翻译的太 ...

  4. 设计模式-策略模式(Strategy Pattern)

    Define a family of algorithms,encapsulate each one,and make them interchangeable(定义一组算法,将每个算法都封装起来,并 ...

  5. 二十四种设计模式:策略模式(Strategy Pattern)

    策略模式(Strategy Pattern) 介绍 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例 有一个Message实体类,对它的操 ...

  6. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了"工厂模式"."策略模式" ...

  7. 8.6 GOF设计模式四: 策略模式… Strategy Pattern

    策略模式- Strategy Pattern  在POS系统中,有时需要实行价格优惠, 该如何处理?  对普通客户或新客户报全价  对老客户统一折扣5%  对大客户统一折扣10%  注:课件 ...

  8. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

  9. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

最新文章

  1. SPU表管理之更新SPU表数据
  2. antd 刷新页面及后退时菜单栏高亮问题
  3. jsp中两个double相乘_图像处理中的代数运算及几何变换
  4. 实例45:python
  5. 没有可用软件包 jenkins。_Jenkins分布式构建与并行构建
  6. 高温津贴:关键是消除劳动者“权利贫困”
  7. js网页文件资源加载器
  8. gif透明背景动画_做动画片用什么软件?99%的人用它就做出来了 - 动画制作博客...
  9. hibernate mysql 视图_转:hibernate映射视图的两种方式
  10. 优化SQL的执行速度
  11. 2018北邮计算机考研分数线,2018年北京邮电大学软件学院考研复试分数线
  12. 《纽约时报》畅销书作家发布新的COVID安全旅行提示电子书
  13. pyecharts世界地图用:国家中英文对照表
  14. java面试题集汇总
  15. 全能成熟稳定开源分布式存储Ceph破冰之旅-上
  16. 2.5元组tuple
  17. 半导体可饱和吸收体(SA)
  18. Json 在线调试工具
  19. linux之文件系统制作及移植
  20. ClickHouse 函数

热门文章

  1. 博达建站中我们上传的网页的代码、img、css在哪里
  2. HTML5最低支持ES几,React+Webpack+ES6 兼容低版本浏览器(IE9)解决方案
  3. USTC 1122:Millionaire Rank List
  4. MLAPP————第四章 高斯模型
  5. 云服务器数据盘数据丢失,磁盘数据恢复,testdisk工具的使用
  6. 计算机内存和寄存器,寄存器和内存的区别
  7. HTML+css+js相关代码(记事本)
  8. Cadence OrCAD Capture CIS数据库和Altium Designer数据库的搭建与配置
  9. Windows 11 绕过 TPM 方法总结,通用无 TPM 镜像下载 (2023 年 1 月更新)
  10. css中的setProperty()方法的理解