大锤最近在家抄《天龙八部》,关于段誉这个人物走向,开头和结尾都抄好了,就是段誉如何得到王语嫣的真心这段不知道怎么写,观众才喜欢看,便瞎写道:**段誉死缠烂打,天天像个跟屁虫一样。**这样写完后,拿给编辑看,编辑看了立即摇头,“不行啊,观众肯定不买帐,回去再修改下。”

当晚,编辑在床上辗转反侧,觉得好好的一部《天龙八部》会不会被大锤抄成烂剧,烂书,没人看?越想越糟心,起床,喝了点茅台,渐渐地,开始迷迷糊糊,眼前的景色突然一晃,好像来到了一个陌生的地方,满地荒芜,乱世林立,其中有一块大石头上刻着一堆不认识的文字:

In computer programming, the strategy pattern (also known as the policy pattern) is a behavioral software design pattern that enables selecting an algorithm at runtime. Instead of implementing a single algorithm directly, code receives run-time instructions as to which in a family of algorithms to use.

文字下面还有一个奇怪的形状:

编辑心中疑惑,难道这里是雁门关外?乔峰父母遇害的地方?石头上的文字就是乔峰他爹跳崖前写下的契丹文?想完便默默记下其中的内容。

第二天起床的时候,编辑闭着眼睛回忆昨晚喝醉后遇到的情形,默写出那段奇怪文字,上街四处打听,终于找到几个认识此文字的人,叫人翻译出来,大致意思为:

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

编辑回家望着这段话,不禁陷入了沉思。。。

另外一边,大锤无奈回家想了一天一夜都没有想出来,就把慕容复这个角色删掉了,然后拿给编辑看,编辑又说,“你这样更不行啊,把慕容复删掉了,剧情又少了一大半,得不偿失啊!”,没办法,大锤只能回家继续改。

回到家后,大锤把那本删掉(撕掉的)稿纸又粘回去,把原先死缠烂打那部分用小米签字笔涂掉,反反复复,不知道该怎么写,突然,外面来人说编辑送来了一幅海报,大锤心中暗喜:难道编辑给我指点来了?便匆忙打开一开,原来是:

“mmp!”,大锤心中冒出这三个字母,四个字符,虽然不知道什么意思。过了一个月,大锤终于想了一个绝好的英雄救美的经历写在破损不堪的原文处并送给了编辑。编辑拿到看后大喜,不过突然又不高兴了,说,“你这个稿纸又撕又粘又涂又改的,不行啊,来,我最近得天人相助,悟出了一点东西,正好教你!”,说着就打开Macbook Pro的IDEA,开始写到:

public abstract class Strategy {/*** 段誉如何得到王语嫣的心*/abstract void getLove();
}class ConcreteStrategy1 extends Strategy{@Overridevoid getLove() {System.out.println("段誉就死缠烂打,天天像个跟屁虫一样;");}
}class ConcreteStrategy2 extends Strategy{@Overridevoid getLove() {//大锤直接把慕容复删掉了System.out.println("两人一见钟情;");}
}class ConcreteStrategy3 extends Strategy{@Overridevoid getLove() {System.out.println("每天远远地跟在王语嫣身后,终于在一个夜深人静的夜晚把王语嫣...(嘿嘿嘿,别想歪了)...从她表哥的手上救了下来,真正的得到了她的心;");}
}
复制代码

编辑顿了顿,把手从背后伸进了内裤,挠了挠屁股,喃喃自语,“像这样封装起来多好啊”,挠完了继续敲打着键盘:

public class Context {private Strategy mStrategy;public static void main(String[] args) {System.out.println("段誉自从在无量山洞里面见了神仙姐姐后,就茶不思,饭不想,终于在燕子坞见到了'神仙姐姐';");Context context = new Context();context.setStrategy(new ConcreteStrategy3());context.getLove();System.out.println("从此段誉和王语嫣过上了幸福的生活。");}public void setStrategy(Strategy strategy) {mStrategy = strategy;}public void getLove() {mStrategy.getLove();}
}
复制代码

写完后,编辑满意地点了点头,抓起大锤的小手,一起按下回车键,按下那一刻,黑色命令行屏幕突然冒出一束金光:

段誉自从在无量山洞里面见了神仙姐姐后,就茶不思,饭不想,终于在燕子坞见到了'神仙姐姐';
每天远远地跟在王语嫣身后,终于在一个夜深人静的夜晚把王语嫣...(嘿嘿嘿,别想歪了)...从她表哥的手上救了下来,真正的得到了她的心;
从此段誉和王语嫣过上了幸福的生活。
复制代码

编辑含情脉脉地低头望着怀里的大锤,说,“这个叫做策略模式,就是说,如果这本小说想编入小学生的书本里面,我们一定要删减,不能让小孩子看到太多影响他们成长的东西,这里改下context.setStrategy(new ConcreteStrategy2());,假如最后一种策略不符合广电总局的社会主义价值观的审核要求,那就简单改成第一种策略,context.setStrategy(new ConcreteStrategy1());

编辑停下来吸了口哇哈哈,继续说道,“你知道这样写有什么好处吗?算了,你先回去吧,小傻瓜,说了你暂时也不会懂的。”

第二天,大锤兴高采烈地到编辑的办公室,找编辑讨论点事情,刚推开办公室的门,就看到编辑倒在一滩血泊中,旁边是用血迹歪歪扭扭的写着两行字:

《Android源码设计模式解析与实战》

Strategy pattern

两行字的后面还有一大滩血,大锤凑近一看,还是用血写成的字:

策略模式主要用来分离算法,在相同的行为抽象下有不同的具体实现策略。这个模式很好地演示了开闭原则,也就是定义抽象,注入不同的实现,从而达到很好的扩展性。

优点

  • 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。
  • 策略模式提供了管理相关的算法族的办法。
  • 策略模式提供了可以替换继承关系的办法。
  • 使用策略模式可以避免使用多重条件转移语句。

缺点

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。

究竟编辑是如何死的?大锤完全没有头绪...

(完)

天龙八部之策略模式歪传相关推荐

  1. 简单工厂模式和策略模式结合使用php

    策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成. 结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象.修改策略模式的配置类即可. 在之前策略模式基础上, ...

  2. java 策略模式和工厂模式区别_Java编程细节——什么是策略模式

    策略模式应该是Java设计模式中最简单的一种模式, 它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑. 其实具体的说,它也是基于面向接口编程的思想,通过定义不同的实现类逻辑来做到的. ...

  3. 利用策略模式结合alibaba/alpha框架优化你的图片上传功能

    图片上传作为一个App经常用到的功能,项目中可以使用各种成熟的框架去完成,但往往实际的情况比想象的复杂.假设我们的上传功能需要满足下面的情况: 支持上传一张图 支持上传多张图 上传多张图时能获取到每张 ...

  4. springboot 文件上传 各种姿势 解锁,策略模式简单运用

    总结:从文件上传谈 策略模式运用 ,虚拟路径配置,纸上得来终觉浅,绝知此事要躬行. 单文件,多文件,base64 几种上传方式 .具体细节参考我的代码库 https://gitee.com/www.l ...

  5. 策略模式——多种发票上传实现案例

    一.策略模式介绍 java_策略模式_java-zh的博客-CSDN博客 二.多种发票登记场景 现在有这么一个业务场景,需要做发票登记,发票登记的类别有运输发票登记,仓储发票登记,外包发票登记,内部发 ...

  6. SpringBoot如何使用策略模式干掉if else

    场景:当我们接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:腾讯,头条),不同渠道所需的处理方式不同,下面我们写一个简单Demo来实现该的场景. 解决思路 实例一:简单举例 1.首先构 ...

  7. 模板方法设计模式与策略模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.Java继承 缺点: 1.耦合性太强,容易破坏封装性,比如空实现之类的: 2.不好多继承: 3.为了扩展会多重继承,导致代 ...

  8. java 策略模式会员_七:策略模式(不同等级会员打折算法)

    定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化: 下面给出策略模式的类图,引自百度百科. 策略模式在LZ第一次接触到的时 ...

  9. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

最新文章

  1. MySQL高可用之mysql-mmm环境搭建
  2. Python面向对象:反射(hasattr和getattr和setattr和delattr)
  3. Vue使用axios提交表单数据
  4. 如何判断文本文件的编码格式?
  5. 安全方向比路由交换难吗_「网工进阶」路由交换:链路聚合的配置,你都会吗...
  6. Flask博客开发——Tinymce编辑器
  7. VS Code 关于SFTP上传文件到多服务器的配置
  8. shell编程快捷方法
  9. python AES对称加密文件、解密文件
  10. 配置使用Powershell管理Azure Stack
  11. 论文笔记_SLAM_An Overview of SLAM
  12. mysql odbc 卸载_Linux卸载MySQL
  13. 94-99.字符串函数使用和实现详解
  14. [异能程序员]第三章 异能初现(第三更)
  15. 完美解决Window11任务栏合并图标的问题。
  16. 全面概述什么是人工智能?
  17. EMC设计技巧及经验总结4:ESD防护布线指导
  18. JQ手册 JQ方法大全 jq获取表单值与赋值代码 50个JQ的例子
  19. 计算机网络 HTTP请求及响应首部字段
  20. 机器学习中的数学——矩阵和向量相乘

热门文章

  1. JavaScript中字符串比较大小
  2. Linux 环境下的 for循环嵌套学习
  3. SpringSecurity知识
  4. iPhone 手机尺寸
  5. python AES CFB-128加密
  6. 软件版本号设置规则及示例
  7. 10亿美元的Magic Leap其安防系数逼近美国国防部
  8. 【通用知识 一】编程语言的分类及各种语言的差异
  9. Mysql实现监控数据统计分析:Druid开源分布式系统与阿里巴巴的Druid数据库连接池
  10. 国务院授权网信办负责互联网信息内容管理