本文章转载大佬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. JAVA操作properties文件
  2. Linux Unix C 中的curses库——curses.h
  3. 计算机网络一些重要的知识
  4. Python中JSON的基本使用
  5. Shell编程——shell常用命令
  6. lol最克制诺手的英雄_上路克制诺手的英雄,他只需要平A就好了!
  7. ChronicleMap –具有堆外内存的Java体系结构
  8. 2021年12月Python小屋编程比赛获奖名单
  9. 试戴系统完全开放—zoomla!逐浪cms在后4.6时代的又一个亮点
  10. 【AI手机三国杀】三星Bixby闯入战场,AI功能集成颠覆人机交互
  11. 数据结构上机实践第八周项目8-稀疏矩阵的三元组表示的实现及应用
  12. 协同过滤工具源码下载
  13. webservice视频教程-基于SOA 思想下的WebService实战
  14. c语言 最大子段和,最大子段和 C语言源码
  15. api.php(260x260),Restful Api文档 -V3-教程
  16. Ubuntu 16.04 中文输入法(搜狗输入法)安装记录
  17. 书店销售系统java代码,VC书店销售管理系统源代码(源码大小6M)
  18. 微软鼠标测试软件,微软Precision鼠标评测:Surface生产力工具最佳搭配
  19. 禅道的测试模块(bug模块)
  20. scau 18924 二叉树的宽度

热门文章

  1. 淘宝商品优化多少分合格?店铺品质分如何优化?
  2. 最简单的三层神经网络Matlab实现
  3. spring boot多数据源动态切换, 多数据源事务管理
  4. 开源作者丢了个炸弹,记colors.js与faker.js事件
  5. 2021新区一中高考成绩查询,2021高考什么时候出成绩 多久能查分
  6. 清理eclipse中得缓存
  7. (五)SSO之CAS框架单点登录, session超时, ajax链接处理
  8. “堵城”伦敦如何规划未来交通?
  9. 在龙芯3B1500上编译安装ICESTORM (open source platform for lattice ICE40 serial FPGA)
  10. linux给目录赋访问权限_【Linux】Linux系统中的权限详解