状态模式

python 状态模式

ぃ、小莉子 提交于 2019-12-07 23:32:31
什么是状态模式? 指的是对象内部状态发生改变对象行为也会发生变化。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 UML类图 封装变化 该模式中状态是变化的,变化部分被做成了抽象类或接口,这让做的目的就是把 变化的 转化为 稳定的 代码示例 import abc ''' 例子:灯的状态 ''' class AbsStatus(abc.ABC): @abc.abstractmethod def action(self, context): ... class Bulb: def __init__(self, status: AbsStatus): self._status = status @property def status(self): return self._status @status.setter def status(self, value: AbsStatus): self._status = value def action(self): self.status.action(self) class OnStatus(AbsStatus): def action(self, context): print("当前状态:开灯") context.status =

状态模式

こ雲淡風輕ζ 提交于 2019-12-06 15:03:25
状态模式 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式 示例1 以红绿灯为例说明。红绿灯有三种状态,红黄绿,每种状态灯的显示颜色是不同的,处理方式是不同的 状态接口 public interface IState { void handle(); } 红灯状态 public class RedState implements IState { @Override public void handle() { System.out.println("红灯状态..."); } } 黄灯状态 public class Yellow implements IState { @Override public void handle() { System.out.println("黄灯状态..."); } } 绿灯状态 public class GreenState implements IState { @Override public void handle() { System.out.println("绿灯状态..."); } } 红绿灯管理类 public class TrafficLightContext { private

设计模式再学习(下)

本秂侑毒 提交于 2019-12-06 10:28:28
写于2019-11-13 理解设计模式前的前堤: 1、模式的应用目标是把可维护性作为很重要指标的程序,像一次性的Demo程序就不需要多高的可维护性; 2、意识到并认可面向接口编程的好处,不认可请回看1; 3、设计模式的本质是解耦,解耦的根本手段是分层,分的层越多,关系越不直观; 4、不用设计模式完全不影响实现需求,只是写的代码多了,重构多了,写着写着,也就进入了设计模式的“窠臼”。 行为型模式 模板方法模式 模板方法也是用得很多的一种模式,尤其是在重构系统时。当你在两个以上相同的类,代码几乎一模一样,只有少许区别时,就要考虑是否用模板方法模式进行重构。父类定好算法步骤,通常将变化的部分封装成abstract方法,由子类实现该abstract方法。从另一个角度来看模板方法,其实它是对面向对象多态的补充,试想一下,多态是父类(接口)定好接口,子类分别实现之,可现实情况并不会总是如此简单,有些是可复用的部分,让每个子类各自重复实现这些可复用的代码明显是有问题的,重构方法就是把这部分可复用的代码前置到父类去写一份即可,那重构后不就是模板方法的应用了么?缺点就是父类调用子类方法,会增加调试的复杂性。 策略模式 既然是策略,那就是对调用方暴露的,即调用方需要了解有哪些策略。面向接口编程使得策略之间可以互相替换,变化部分通过策略类封装起来,也就意味着一个事情可以有多种实现方案,在使用if..

判断不同设计模式可以使用的关键词

匆匆过客 提交于 2019-12-05 14:33:50
目录 时间安排 真理 MVC使用的设计模式 硬编码 简单工厂 工厂方法 抽象工厂 建造者 原型 单例 适配器 桥接 组合 装饰 外观 享元 代理 职责链 命令 中介者 备忘录 策略 观察者 重点 命令 模式撤销 抽象工厂整套???? 对象类适配器??? 明天带粗鄙 最难的两套卷 时间安排 猜20道选择 40 20min 5简答 20 20min 2大题 40 20min一个 最后检查一下 注意审题,默念题干 真理 方法向父类集中,数据向子类集中 MVC使用的设计模式 p4观察者模式 组合模式 策略 工厂方法 装饰 控制器就是一个中介者模式 硬编码 硬编码是将数据直接嵌入到程序或其他可执行对象的 源代码 中的软件开发实践,与从外部获取 数据 或在运行时生成数据不同。 硬编码数据通常只能通过编辑源代码和重新编译可执行文件来修改,尽管可以使用调试器或十六进制编辑器在内存或磁盘上进行更改。 硬编码的数据通常表示不变的信息,例如物理常量,版本号和静态文本元素。 另一方面,软编码数据对用户输入,HTTP 服务器 响应或配置文件等任意信息进行 编码 ,并在运行时确定。 +策略模式的描述 TODO 最后的面向对象关系 再复习1.5遍代码 重点复习 命令模式 中介者模式 观察者模式 享元模式 原型模式 抽象工厂 状态模式 备忘录模式 第二章 违背开闭原则的:简单工厂 原型模式深克隆 外观模式

js策略模式vs状态模式

ぃ、小莉子 提交于 2019-12-05 08:55:49
一.策略模式 1. 定义 :把一些小的算法,封装起来,使他们之间可以相互替换(把代码的实现和使用分离开来) 2.利用策略模式实现小方块缓动 html代码: <div id="container" style="width:500px;margin:0 auto;background-color: silver;"> <div id="move" style="position: absolute;background-color:blue;width:20px;height:20px"></div> </div> js代码: var container = document.getElementById('container'); container.style.height = window.innerHeight +"px"; var tween = {//t动画已消耗时间、b原始位置、c目标位置、d持续时间 linear:function(t,b,c,d){ return c*t/d+b; }, easeIn:function(t,b,c,d){ return c*(t/=d)*t+b; }, strongEaseIn:function(t,b,c,d){ return c*(t/=d)*t*t*t*t+b; }, strongEaseOut:function(t,b,c,d

设计模式16——Memento设计模式

99封情书 提交于 2019-12-05 07:39:07
Memento备忘录设计模式是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到以前保存的状态。Memento备忘录设计模式的结构如下: Memento备忘录设计模式有以下3个重要角色: Originator:需要保存内部状态的对象。 Caretaker:为Originator保存并恢复状态的对象。 Memento:存放Originator内部状态的对象,由Originator进行读写,并且Caretaker进行维护。 Memento备忘录设计模式例子代码如下: // Memento class Memento{ private String state; public Memento(String state){ this.state = state; } public String getState(){ return state; } } // Caretaker class Caretaker{ private Stack<Memento> mementos = new Stack<Memento>(); public void addMemento(Memento m){ mementos.push(m); } public Memento getMemento(){ if(!mementos.empty()){ return mementos.pop(

设计模式——行为型模式之状态模式(五)

别等时光非礼了梦想. 提交于 2019-12-04 19:15:40
状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 介绍 意图: 允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 主要解决: 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。 何时使用: 代码中包含大量与对象状态有关的条件语句。 如何解决: 将各种具体的状态类抽象出来。 关键代码: 通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句。 应用实例: 1、打篮球的时候运动员可以有正常状态、不正常状态和超常状态。 2、曾侯乙编钟中,'钟是抽象接口','钟A'等是具体状态,'曾侯乙编钟'是具体环境(Context)。 优点: 1、封装了转换规则。 2、枚举可能的状态,在枚举状态之前需要确定状态种类。 3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 4

设计模式——状态模式

本小妞迷上赌 提交于 2019-12-04 18:39:56
定义 对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 模板 状态模式包含以下主要角色。 环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。 具体状态(Concrete State)角色:实现抽象状态所对应的行为。 实例 下面举一个上传过程中状态控制: 状态模式中,UploadController 相当于模块上下文,它持有一个状态变量mAbstractState,并通过该变量的方法实现状态的切换。 如何实现状态转换? 在IState中,以及所有具体实现State中接口都需要传入UploadController作为参数,通过获取Controller的实例来进行状态转换。 优点 1、封装了转换规则。 2、枚举可能的状态,在枚举状态之前需要确定状态种类。 3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 4、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。 5、可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。 缺点 1、状态模式的使用必然会增加系统类和对象的个数。 2

23种GoF设计模式概述

旧巷老猫 提交于 2019-12-04 04:59:20
23种GoF设计模式概述 在前面,我们对 GoF 的 23 种设计模式进行了分类,这里先对各个设计模式的功能进行简要介绍,以便有个大概了解。后面的章节再进行详细介绍。 创建型模式 关注于怎么创建对象的创建型模式,他们将对象的创建与使用相互分离,对象的使用者无需关心如何创建对象,只知道怎么使用就行,以降低耦合度。犹如汽车使用人无需关注汽车是怎么造出来一样,只要知道怎么使用就行。下面这5种模式就是属于这一类。 单例(Singleton)模式:控制某个类只能自行生成一个可供外部全局访问的实例。例如:Windows的窗口管理器或者任务管理器都是只有一个实例。 原型(Prototype)模式:将一个创建成本高(如:装载大文件、初始化耗时长、CPU资源占用多等)的对象作为原型,通过对其进行复制或者克隆,来创建其他类似的新实例。 抽象工厂(Abstract Factory)模式:由继承自抽象工厂类的具体工厂分别来创建有相同联系的多个不同产品。例如不同的培训学校,可以创建课程和课程所用的教材。 建造者(Builder)模式:针对一个复杂对象,它的构建需要很多步骤和部件,将这种对象拆解成多个相对简单的构成部件或者步骤,然后再根据需要分别构建他们,直到得到该复杂对象。例如:快餐店的套餐,他的构造分别由汉堡、饮料、薯条构成,这就要求建造或制作者分别创建各种物品,然后返回一个完整的套餐给点餐人员。

状态模式

大憨熊 提交于 2019-12-03 13:27:12
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 介绍 意图: 允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 主要解决: 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。 何时使用: 代码中包含大量与对象状态有关的条件语句。 如何解决: 将各种具体的状态类抽象出来。 关键代码: 通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句。 应用实例: 1、打篮球的时候运动员可以有正常状态、不正常状态和超常状态。 2、曾侯乙编钟中,'钟是抽象接口','钟A'等是具体状态,'曾侯乙编钟'是具体环境(Context)。 优点: 1、封装了转换规则。 2、枚举可能的状态,在枚举状态之前需要确定状态种类。 3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 4