一.简介:

策略模式:

背景:商店要打折销售,各种版本的销售方式,让小菜心烦意乱

内容:    定义算法家族,分别封装起来,让他们之间可以户型替换,此模式让算法的变化,不会影响到使用算法的用户。

图文并茂:

有图可以简单明了地知道,这是一种方法选择模式,具体的策略类封装了具体的算法(行为),继承了策略类;
那有一个简单的书上的例子,当商店遇到节日搞活动的时候,会采取不同的销售方式来扩大销售量,有 买一送一、买五送三等方式,可是,具体采用什                                  么方式只有老板知道,编程序的不知道啊,所以,我们把自己能想到的 促销方式都各个封装起来,等到节日来临的时候,让老板决定用哪一种,然后我们就选
                               取那一种。也就是说,所有的方式都准备好了,就等你来随机挑一种。

状态模式:

背景: 小菜老加班,给自己的工作时间段定义当时自己的身心状态

内容: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来就像是改变了其类。

图文并茂:

 
                                     
同样,从图中,我们可以看到,这是一种选择 对应类,每一个子类实现一个与具体状态相关的行为
我们单从图上其实看不出什么,结合一下当时的情景:(上午值班-精力充沛;中午值班-饿困交加;下午值班-状态不错;晚上加班-疲累至极;)
现在再看图,不难看出,这是把各个阶段也就是所有的状态分别封装起来,然后呢,在具体的时间段有具体的行为具体的状态,也就是用具体的时间,去                                         对应当时唯一的状态,然后实现了Context的一个特定状态相关的行为。

二.对比

策略模式:

我们的策略模式是众里挑一,从许多种选择中选择出适合自己的,随便主人高兴

状态模式:

状态模式是有了具体的条件去众多选择中找与自己本身对应的那一个,是有条件要求的

三.小结:

整体观察策略模式与状态模式,其实他们都是一种选择模式,他们的区别(我自己认为)也就是那对条件的要求。 这个也已经在上面陈述,当然还有其他的不同的观点,但是这样对比着学习,总结,会使我们的记忆理解的更加深刻。

《大话》之 策略模式 Vs 状态模式的更多相关文章

  1. Java 策略模式和状态模式

    本文是转载的,转载地址:大白话解释Strategy模式和State模式的区别 先上图: 本质上讲,策略模式和状态模式做得是同一件事:去耦合.怎么去耦合?就是把干什么(语境类)和怎么干(策略接口)分开, ...

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

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. ...

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

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

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

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

  5. Java重构-策略模式、状态模式、卫语句

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

  6. 【转】Java重构-策略模式、状态模式、卫语句

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

  7. 设计模式之策略模式和状态模式(strategy pattern & state pattern)

    本文来讲解一下两个结构比较相似的行为设计模式:策略模式和状态模式.两者单独的理解和学习都是比较直观简单的,但是实际使用的时候却并不好实践,算是易学难用的设计模式吧.这也是把两者放在一起介绍的原因,经过 ...

  8. 策略模式 VS 状态模式

    策略模式 VS 状态模式 策略模式 VS 状态模式 | 菜鸟教程 https://www.runoob.com/w3cnote/state-vs-strategy.html

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

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

随机推荐

  1. ffmpeg-20160701-git-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  2. ALV 输入数据时数字缩小一千倍的问题解决

    这个字段后面有三位小数  我输入 1 一回车 就变成了0.001 了 解决方法 DATA: wa_fieldcatalog    TYPE lvc_s_fcat,    "显示数据列内表工作 ...

  3. CentOS7 win7 u盘装双系统 修复系统

    环境: ASUS MB VER K45VD 笔记本电脑一台( i5-3230M 处理器. SATA . Nvidia). Windows7 系统 在 win7 下安装 CentOS7 使用 Ultra ...

  4. 【python】入门学习(五)

    字符串: 正索引,从0开始 和 负索引,从-1开始 >>> s = 'apple' >>> s[0] 'a' >>> s[1] 'p' >& ...

  5. JS倒计时,不会重复执行

    直接上代码,亲自测试了的,没问题咯 <html> <head> <title>点击获取验证码按钮后按钮变灰,倒计时一段时间后又可重复点击</title> ...

  6. Linux Window Redis安装

    Linux 下简易的安装过程: 1.源码安装之前要先安装gcc,不然编译会出错, 2.下载源码,去http://download.redis.io/releases/这个文件夹内找想安装的版本,我下载 ...

  7. Java堆、栈和常量池以及相关String的详细讲解

    一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...

  8. SQLServer视图

    视图简介:通过定义 SELECT 语句以检索将在视图中显示的数据来创建视图.SELECT 语句引用的数据表称为视图的基表.在SQL Server 2005系统中,可以把视图分为3种类型,即标准视图,索 ...

  9. openfile学习笔记

    Openfiler是在rPath Linux基础上开发的,它能够作为一个独立的Linux操作系统发行.Openfiler是一款非常好的存储管理操作系统,开源免费,通过web界面对 存储磁盘的管理,支持 ...

  10. 原始套接字SOCK_RAW

    原始套接字SOCK_RAW 实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM).而这些数据包 ...