python-状态模式】的更多相关文章

1.应用场景 (1)通过改变对象的内部状态从而改变对象的行为,一般表现为状态的顺序执行 2.代码实现 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ from abc import ABCMeta, abstractmethod class Context(object): def __init__(self): self.state = ConditionOneState(self) def request(self): '''上下文的请求''' se…
状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 下面是一个状态模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式——状态模式 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 应用场景:当控制一个对象的状态转换的条件表达式过于…
python设计模式之状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态机?状态机是一个抽象机器,有两个关键部分,状态和转换.状态是指系统的当前(激活)状况.例如,假设我们有一个收音机,其两个可能的状态是在调频波段( FM)或调幅波段( AM)上调节.另一个可能的状态是从一个FM/AM无线电台切换到另一个.转换是指从一个状态切换到另一个状态,因某个事件或条件的触发而开始…
github地址:https://github.com/cheesezh/python_design_patterns 题目 用代码模拟一天的工作状态,上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬. 基础版本--函数版 hour = 0 work_finished = False def write_program(): if hour < 12: print("当前时间: {} 点, 上午工作,精神百倍".format(hour)) elif hour < 13: pr…
状态模式可以看做是在运行时改变对象行为的一种方式.状态模式允许对象在其内部状态变化时改变其行为,此时感觉就像对象本身已经改变了一样. 参与者: State接口:State基类,定义不同状态共同需要执行的接口. ConcreteSate对象:State基类的子类,不同状态的可以在子类接口中实现不同的操作. Context对象:客户端需要关注的对象,此对象中维护自身的具体状态对象,当状态改变时,改变的是Context中的状态对象,而Context对象是不需要改变的. 优点: 对象的行为是根据运行时对…
1.为什么会出现状态模式? 在软件开发过程中,各种应用程序可能会根据不同的情况做出不同的处理.最直接的方案就是把所有的可能发生的情况都考虑到.然后使用条件语句(if...elseif...elseif......else)对不同情况的作出判断并进行处理.但是假如状态比较复杂,就会出现多个判断语句,判断语句中又包含这各种操作,这显然是不受欢迎的.状态模式的出现就是为了解决这种问题. 2.啥是状态模式? 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题,将一个对象的状态从该对象中…
# coding=utf-8 # *状态模式:一个方法的判断逻辑太长,就不容易修改.方法过长,其本质就是,# * 就是本类在不同条件下的状态转移.状态模式,就是将这些判断分开到各个能# * 表示当前状态的独立类中 class State: def persion_state(self): pass class SomeDay: def __init__(self): self.time = 8 self.current = Breakfast() def set_state(self, temp…
Atitit. 有限状态机 fsm 状态模式 1. 有限状态机 1 2. "状态表"和"状态轮换表" 1 3. 有限状态机概念(状态(State)事件(Event)转换(Transition) 动作(Action) 2 4. 状态机的应用场景 2 4.1. ,"有限状态机"在游戏的人工智能方面是很有用处的. 2 4.2. 用状态机模式消除复杂的 if else 逻辑 2 4.3. 源码文本处理状态机 2 4.4. 正则表达式(regexp),判断…
    在<编写高质量代码:改善python程序的91个建议>的建议53:用状态模式美化代码小节中,介绍了状态模式例如以下:就是当一个对象的内在状态改变时,同意改变其行为,但这个对象看起来像是改变了其类.     正如:http://blog.csdn.net/ponder008/article/details/6887443博文所写代码, #encoding=utf-8 # #by panda #状态模式 def printInfo(info):     print unicode(info…
同样是水,固态,气态,液态的变化,是由温度引起. 引此为思考状态模式. from abc import ABCMeta, abstractmethod # 引入ABCMeta和abstractmethod来定义抽象类和抽象方法 """ version 1.0 class Water: def __init__(self, state): self.__temperature = 25 self.__state = state def set_state(self, state…
/** * 状态模式 * @author TMAC-J * 状态模式和策略模式很像,其实仔细研究发现完全不一样 * 策略模式各策略之间没有任何关系,独立的 * 状态模式各状态之间接口方法都是一样的 * 另外一个区别是状态模式主要用于状态经常发生改变的情况 * 策略模式发生在不改变的情况,策略模式一般在CONTEXT初始化时就决定了,并且中途不会改变 * 换句话说,策略模式只是在对象初始化的时候更改执行模式,而状态模式是根据对象实例的周期时间而动态地改变对象实例的执行模式. * 状态模式的方法都是…
说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对“状态模式”并不陌生,因为我们之前使用到了状态模式进行重构.上一篇博客我们讲的主题是“组合模式”,我们使用组合模式创建了一个树形结构,并给出了遍历方式.今天我们来认识一下另一种模式,那就是“状态模式”,今天就从银行的ATM自动取款机中的取款流程来学习一下状态模式. 还是老规矩,开门见山.下方是状态模式的定义: 状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修够了它的…
<?php /*状态模式:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.(行为模式) * * 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态, * 这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的. * 当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化. * * * 三要素:1 抽象状态接口,所有具体状态实现此接口. * 2: 具体状态,有几个状态就有…
本文是转载的,转载地址:大白话解释Strategy模式和State模式的区别 先上图: 本质上讲,策略模式和状态模式做得是同一件事:去耦合.怎么去耦合?就是把干什么(语境类)和怎么干(策略接口)分开,互不依赖.打个比方,下面是我一天的行程: class 我{ 吃饭(){} 逛街(){} 啪啪啪(){} 睡觉(){} } 但问题来了,啪啪啪是个技术活,有著名的48式,今天到底要用哪一式呢?于是我的代码变成了这样: class 我{ 吃饭(){} 逛街(){} 啪啪啪1式(){} 啪啪啪2式(){}…
状态模式笔记   当一个对象的内部状态发生改变时,会导致行为的改变,这像是改变了对象   状态模式既是解决程序中臃肿的分支判断语句问题,将每个分支转化为一种状态独立出来,方便每种状态的管理又不至于每次执行时遍历所有分支   主要目的:将条件判断的不同结果转化为状态对象的内部状态,既然是状态对象的内部状态,所以作为状态对象内部的私有变量,然后提供一个能够调用状态对象内部状态的接口方法对象.   最终目的:简化分支判断流程   当有许多判断时,如果用if或者switch条件判断语句来写,是很难维护的…
1.状态模式简介 1.1>.定义 状态模式的核心思想是允许一个对象在它的内部状态改变时改变它的行为,即不同的状态对应不同的行为. 状态模式的针对性很强,当有状态变化的时候可以选择状态模式. 1.2>.使用频率 中等 2.状态模式结构 2.1>.结构图 2.2>.参与者 状态模式参与者: ◊ Context:状态管理器 ° 定义对Client感兴趣的接口 ° 维持一个ConcreteState子类的实例,这个实例定义当前状态 ◊ State:状态,定义一个接口以封装与Context的…
定义: 当一个对象有多个状态,并且在每个状态下有不同的行为,可以使用状态模式来在其内部改变状态时改变其行为,而客户端不会察觉状态的改变,仍使用同样的方法或接口与对象进行交互. 结构图: Context:上下文类,与客户端进行交互的对象.内部包含了会导致状态改变的成员变量,各种状态的实例以及对客户端交互的接口.当客户端执行业务方法时,类本身不做处理,而是将其转发给自己的内部状态处理,当状态处理完成后,进行检查是否需要更改状态. State:抽象State类,定义了各种状态的统一的接口,由自状态实现…
状态模式 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类. 状态模式UML图 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理. 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为. 具体状态(Concrete State):实现抽象状态定义的接口. 状态模式代码 package com.roc.state; public class…
做了一个项目,项目中一个藏品详情界面针对不同用户,和用户所处于的状态的不同,展示的效果和操作的权限都会不同.想到了状态模式,从来没有用过,赶紧学一下然后用一用.期待兴奋 看了这么多的博客,终于找到一个可以分享的博客啦,这里 1.事必有因 我有一个视图层,在这个视图层上展示的效果和操作行为是一个或多个动态变化的属性来决定的,这些属性被称为状态. 保利藏品库房管理软件中藏品信息展示界面 1.人员分类 :仓库管理员.藏品录入业务员 2.操作状态:观看状态.编辑状态 业务员录入藏品状态 -- 可以修改藏…
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式——建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式 [Head First设计模式]一个人的平安夜——单例模式 [Head First设计模式]抢票中的设计模式——代理模式 [Head First设计模式]面向对象的3特征5原则 [Head First设计模式]鸭子…
状态模式:允许对象在内部状态改变时改变他的行为,对象看起来好像修改了他的类. 用到的设计原则1.封装变化2.多用组合,少用继承3.针对接口编程,不针对实现编程4.松耦合5.对扩展开放,对修改关闭6.依赖抽象,而不依赖具体7.只和朋友交谈8.别找我,我会找你9.类应该只有一个修改的理由 例子来自<Head First设计模式>,糖果机的例子 interface State { public void insertQuarter(); public void ejectQuarter(); pub…
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化. 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理. 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为. 具体状态(Concrete State…
State状态模式作用:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. UML图如下: State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为.ConcreteState类,具体状态,每一个子类实现一个与Context的一个状态相关的行为.Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列…
用途 状态模式 (State) 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式是一种行为型模式. 结构…
状态模式 状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类. 状态模式的使用场景也特别明确,有如下两点: 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为.(有些对象通常会有好几个状态,在每个状态都只可以做当前状态才可以做的事情,而不能做其它状态能做的事儿) 一个操作中含有大量的分支语句,而且这些分支语句依赖于该对象的状态.状态通常为一个或多个枚举常量的表示. 一.有限状态机 状态总数(state)是有限的. 任一时刻,只处在…
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本次LZ给各位介绍状态模式,之前在写设计模式的时候,引入了一些小故事,二十章职责连模式是故事版的最后一篇,之后还剩余四个设计模式,LZ会依照原生的方式去解释这几个设计模式,特别是原型模式和解释器模式,会包含一些其它的内容. 好了,接下来,我们先来看看状态模式的定义吧.                定义:(源于Design P…
1. 状态模式 var offLightState = function(light){ this.light = light; } offLightState.prototype.buttonWasPressed = function(){ console.log('弱光'); this.light.setState(this.weakLightState); } var weakLightState = function(light){ this.light = light; } weakL…
一.简介: 策略模式: 背景:商店要打折销售,各种版本的销售方式,让小菜心烦意乱 内容:    定义算法家族,分别封装起来,让他们之间可以户型替换,此模式让算法的变化,不会影响到使用算法的用户. 图文并茂: 有图可以简单明了地知道,这是一种方法选择模式,具体的策略类封装了具体的算法(行为),继承了策略类: 那有一个简单的书上的例子,当商店遇到节日搞活动的时候,会采取不同的销售方式来扩大销售量,有 买一送一.买五送三等方式,可是,具体采用什                            …
状态和行为: 所谓对象的状态,通常指的就是对象实例的属性的值:而行为指的就是对象的功能,再具体点说,行为大多可以对应到方法上. 状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能.也就是说,状态和行为是相关联的,它们的关系可以描述为:状态决定行为. 由于状态是在运行期被改变的,因此行为也会在运行期根据状态的改变而改变. 环境和状态处理对象: 在状态模式中,环境(Context)是持有状态的对象,但是环境(Context)自身并不处理跟状态相关的行为,而是把处理状态…
 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.当控制一个对象的状态转换条件分支语句(if...else或switch...case)过于复杂时,可以此模式将状态的判断逻辑转移到不同状态的一系列类中,将复杂的逻辑简单化,便于阅读与维护. 概述 1.为什么要使用状态模式?  在软件开发过程中,应用程序可能会根据不同的条件作出不同的行为.常见的解决办法是先分析所有条件,通过大量的条件分支语句(if...else或switch...case)指定应用程序在不同条件下作出的不…