本文是转载的,转载地址:大白话解释Strategy模式和State模式的区别

先上图:

本质上讲,策略模式和状态模式做得是同一件事:去耦合。怎么去耦合?就是把干什么(语境类)和怎么干(策略接口)分开,互不依赖。打个比方,下面是我一天的行程:

class 我{吃饭(){}逛街(){}啪啪啪(){}睡觉(){}
}

但问题来了,啪啪啪是个技术活,有著名的48式,今天到底要用哪一式呢?于是我的代码变成了这样:

class 我{吃饭(){}逛街(){}啪啪啪1式(){}啪啪啪2式(){}啪啪啪3式(){}睡觉(){}
}

但代码如果是这样的,宝宝肯会被老板开掉的。但宝宝发现,啪啪啪的方式其实取决于我的妹子。对三种不同类型的妹子,我的表现是不同的。

class 鬼妹 implements 妹子{爱爱(){print(”Come on!“);}
}class 乖妹 implements 妹子{爱爱(){print("I love you!");}
}class 萌妹 implements 妹子{爱爱(){print("Ya Mie Die!");}
}interface 妹子 {爱爱();
}

而且我惊讶地发现,所有妹子都把啪啪啪叫做”爱爱“。所以只要我只要知道今天晚上是和哪个妹子在一起,根据多态性,我只要说同一句话:”妹子让我们爱爱吧“。接下来发生的事,我只要闭上眼睛享受就好了。

class 我{吃饭();逛街();啪啪啪(妹子 今晚的妹子){今晚的妹子.爱爱();}睡觉();
}

于是,你懂的:

main(){我 胖胖 = new 我();print("周一:");妹子 娘子 = new 乖妹();胖胖.啪啪啪(娘子);print("周二:");妹子 小三 = new 萌妹();胖胖.啪啪啪(小三);
}

//OutPut:
周一:I love you!
周二:Ya Mie Die!

以上的就叫:策略模式!

但后来我发现,其实我做的每一件事都取决我的妹子,我彻底震惊了!我的生活不能没有妹子!

class 我{吃饭(妹子 今晚的妹子){今晚的妹子.饭饭();}逛街(妹子 今晚的妹子){今晚的妹子.逛逛();}啪啪啪(妹子 今晚的妹子){今晚的妹子.爱爱();}睡觉(妹子 今晚的妹子){今晚的妹子.呼呼();}
}

于是终于说出了那句话:嫁给我吧!于是,她彻底走进了我的生活!

class 我{吃饭(){老婆.饭饭();}逛街(){老婆.逛逛();}啪啪啪(){老婆.爱爱();}睡觉(){老婆.呼呼();}//fields妹子 老婆 = new 乖妹子();
}

但你们是懂我的,我的小三怎么办呢?要是每天都能切换情人就最好了!

class 我{切换情人(妹子 情人){老婆 = 情人;}   吃饭(){老婆.饭饭();}逛街(){老婆.逛逛();}啪啪啪(){老婆.爱爱();}睡觉(){老婆.呼呼();}//fields妹子 老婆 = new 乖妹子();
}

于是每一天都充满了新鲜感呢!

main(){我 胖胖 = new 我();print("周一:");//老婆胖胖.啪啪啪();print("周二:");妹子 小三 = new 萌妹();胖胖.切换情人(小三);//小三胖胖.啪啪啪();
}

//OutPut:
周一:I love you!
周二:Ya Mie Die!

于是,我都爱上了这种叫”状态模式“的生活方式。

所以,”策略模式“就好比单身的时候,没有固定情人,每天用微信出去约泡。”状态模式“就是结婚以后,有了固定的情人,生活可以在老婆和小三之间游刃有余!

说到这里,大家一定都豁然开朗了吧!那么,祝大家生活幸福!

Java 策略模式和状态模式相关推荐

  1. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  2. java输出不同颜色_Java设计模式-策略模式、状态模式

    推荐阅读: 一只Tom猫:都是"Redis惹的祸",害我差点挂在美团三面,真是"虚惊一场"! java喵:6大面试技能树:JAVA基础+JVM+算法+数据库+计 ...

  3. java - 策略模式、状态模式、卫语句,避免多重if-else(转)

    前言 当代码中出现多重if-else语句或者switch语句时.弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处 ...

  4. 状态模式java 在线投票_Java 状态模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模 ...

  5. Java进阶篇设计模式之十二 ---- 备忘录模式和状态模式

    前言 在上一篇中我们学习了行为型模式的策略模式(Strategy Pattern)和模板模式(Template Pattern).本篇则来学习下行为型模式的两个模式,备忘录模式(Memento Pat ...

  6. 【设计模式】 模式PK:策略模式VS状态模式

    1.概述 行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,我们先看看两者的通用类图,把两者放在一起比较一下. 策略模式(左)和状态模式(右)的通用类图. 两个类图非常相似,都是通过Cont ...

  7. 《大话》之 策略模式 Vs 状态模式

    一.简介: 策略模式: 背景:商店要打折销售,各种版本的销售方式,让小菜心烦意乱 内容:    定义算法家族,分别封装起来,让他们之间可以户型替换,此模式让算法的变化,不会影响到使用算法的用户. 图文 ...

  8. 对策略模式与状态模式的一点思考

    在以前的一片博文里 http://www.cnblogs.com/mightofcode/archive/2012/11/19/2771216.html,我发表了我对设计模式的一点看法 但是今天的一个 ...

  9. 策略模式 VS 状态模式

    在行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,两个类图非常相似,都是通过Context类封装一个具体的行为,都提供了一个封装的方法,是高扩展性的设计模式. 但根据两者的定义,我们发现两 ...

最新文章

  1. 基于 HTML5 Canvas 的交互式地铁线路图
  2. centos docker 入门笔记(一)
  3. my stackoverflow
  4. HTML 5中的tips两则
  5. 移动端媒体尺寸_网络推广外包浅析提升移动端网站建设效率有哪些网络推广外包技巧...
  6. 544B. Sea and Islands
  7. windows技巧——notepad2 取代自带 notepad ,功能强大!
  8. C++ stander library--type traits and type utility
  9. 2021年安全员-C证(陕西省)考试资料及安全员-C证(陕西省)新版试题
  10. 如何在电脑上查看手机网页源代码?
  11. 网络赛1-D - Find Integer HDU - 6441
  12. 合并的表格怎么加横线_如何在excel中文字后面加横线
  13. 机器学习的学习形式分类
  14. js变量的重复声明问题总结
  15. Python爬虫技巧一之设置ADSL拨号服务器代理
  16. aix oracle汇文,oracle_FOR_AIX维护手册.doc
  17. 阅读总结——腾讯科技TMT解码No.8
  18. 虚拟化系统到VMware虚拟机
  19. NBA历史上的4双和准4双记录!
  20. 2021天梯赛 L2-040 哲哲打游戏 题解

热门文章

  1. 压力测试网站_一行命令就能网站压力测试和网站故障排除
  2. python图片二进制流转换成图片_python将图片二进制数据转换成Django file对象
  3. linux字符串转大写_在 Linux 命令行中转换大小写
  4. 十六、去年写的pandas使用方法梳理,2020年5月13日整理
  5. 前端生成Excel 表格
  6. Tomcat 初始化端点错误--Error initializing endpoint
  7. 今日arXiv精选 | 21篇EMNLP 2021最新论文
  8. Github 1.3万星,迅猛发展的JAX对比TensorFlow、PyTorch
  9. 详解预训练模型、图神经网络、模型压缩、知识图谱、信息抽取、序列模型、深度学习、语法分析、文本处理...
  10. CVPR 2021 | Facebook提出FP-NAS:搜索速度更快、分类精度更高、性能更好