一.简介:

策略模式:

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

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

图文并茂:

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

状态模式:

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

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

图文并茂:

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

    数位DP #include <cstdio> #include <cstring> using namespace std; ; ; long long n; int f[MA ...

  2. MMO可见格子算法

    看注释吧,写的很清楚了 using System; using System.Collections.Generic; using System.Diagnostics; using System.L ...

  3. effective OC2.0 52阅读笔记(四 协议与分类)

    23 通过委托与数据源协议进行对象间通信 总结:委托模式的常规委托模式中,信息从类Class流向受委托者delegate.数据源模式,信息从数据源datasource流向class.数据源和受委托者可 ...

  4. CentOS基础指令备忘

    功能 指令 可用参数 示例 说明 新建文件夹 mkdir   mkdir etc/temp 在当前目录的etc文件夹下新建temp文件夹 新建文件 vi   vi abc.sh 新建名为abc.sh的 ...

  5. Python~第三方模块

    第三方库还有MySQL的驱动:MySQL-python,用于科学计算的NumPy库:numpy,用于生成文本的模板工具Jinja2 模块搜索路径 Windows下: 双\\   sys.path.ap ...

  6. mybatis延迟加载

    配置完成后可能会报错Cannot enable lazy loading because CGLIB is not available. Add CGLIB to your classpath 是由于 ...

  7. ajax,下拉框级联

    js代码: $(document).ready(function() { $("#type1").change(function(){ var type1Code=$(" ...

  8. ajax+bootstrap做弹窗

    建页面,引入bootstrap弹窗 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  9. asp.net 短信群发

    protected void Btn_Save_Click(object sender, EventArgs e) { string Contents = this.Txt_SmsContents.T ...

  10. 忘记Mysql登录密码

    1,使用安全模式跳过验证: 如果 Mysql在运行,Kill掉. 如果mysqld_safe无法启动,可用管理员权限sudo . 2,本地登录: 启动Mysql 3,修改密码: 5.7之后, 更改密码 ...