设计模式目录
http://blog.csdn.net/fenglailea/article/details/52733435
风.fox

状态模式 State Pattern

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

通用类图

组成

  • 抽象状态角色 State
    接口或抽象类、负责对象状态定义,并且封装环境角色以实现状态切换
  • 具体状态角色 ConcreteState
    每一个具体状态必须完成两个职责:本状态的行为管理以及趋向状态处理,通俗的说,就是本状态下要做的事情,以及本状态如何过渡到其他状态
  • 环境角色 Context
    定义客户端需要的接口,并且负责具体状态的切换

通用源码

JAVA

//抽象状态角色
public abstract class State{//定义一个环境角色,提供子类访问protected Context context;//设置环境角色public void setContext(Context _context){this.context=_context;}//行为public abstract void handle1();public abstract void handle2();
}
//环境角色
public class ConcreteState1 extends State{@Overridepublic void handle1(){...}@Overridepublic void handle2(){//设置当前状态为STATE2super.context.setCurrentState(Context.STATE2);//过渡到STATE2状态,由Context实现super.context.handle2();}
}
public class ConcreteState2 extends State{@Overridepublic void handle1(){//设置当前状态为STATE1super.context.setCurrentState(Context.STATE1);//过渡到STATE1状态,由Context实现super.context.handle1();}@Overridepublic void handle2(){...}
}
//具体环境角色
public class Context{//定义状态public final static State STATE1 =new ConcreteState1();public final static State STATE2 =new ConcreteState2();//当前状态private State CurrentState;//获得当前状态public State getCurrentState(){return CurrentState;}//设置当前状态public void setCurrentState(State currentState){this.CurrentState=currentState;//切换状态this.CurrentState.setContext(this);}//行为委托public void handle1(){this.CurrentState.handle1();}public void handle2(){this.CurrentState.handle2();}
}
//场景
public class Client{public static void main(String[] args){//定义环境角色Context context=new Context();//初始化状态context.setCurrentState(new ConcreteState1());//执行行为context.handle1();context.handle2();}
}

优点

结构清晰
遵循设计原则
封装性好

使用场景

行为随状态改变而改变的场景
条件、分支判断语句的替代者

适配器模式之状态模式相关推荐

  1. 7、大话设计模式--状态模式 、适配器模式、备忘录模式、组合模式、迭代器模式

    第十六章:无尽加班何时休--状态模式 状态模式 :   优点: 缺点: 所使用的项目是:工作状态 功能: 界面: 设计思路: 收获: 附: 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出 ...

  2. 设计模式之状态模式(State)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. Java设计模式之行为型:状态模式

    背景: 介绍状态模式前,我们先看这样一个实例:公司力排万难终于获得某个酒店的系统开发项目,并且最终落到了你的头上.下图是他们系统的主要工作: 当第一眼看到这个系统时你就看出这是一个状态图,每个框都代表 ...

  4. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  5. Java设计模式——状态模式【State Pattern】

    一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  6. 【每天一个java设计模式(十七)】 - 状态模式

    在状态模式中,类的行为是基于它的状态改变的,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.这种类型的设计模式属于行为型模式. 在状态模式中,我们创建表示各种状态的对象和一个行为 ...

  7. 【设计模式系列19】状态模式原理分析及其和策略模式,责任链模式的区别

    状态模式原理分析 设计模式系列总览 前言 什么是状态模式 状态模式示例 状态模式角色 状态模式与责任链模式 状态模式与策略模式 状态模式应用场景 状态模式优缺点 总结 设计模式系列总览 设计模式 飞机 ...

  8. 颜值10分姐姐带我玩转java设计模式(内附照片)- 状态模式

    先不说话,直接来张姐姐照片,称呼上官姐姐即可,希望上官姐姐能带飞 原创不易,麻烦先三连,再细看,谢谢 示例的源码可以直接通过csdn下载也可以通过git导出:https://github.com/ig ...

  9. JS设计模式(13)状态模式

    什么是状态模式? 定义:将事物内部的每个状态分别封装成类,内部状态改变会产生不同行为. 主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为. 何时使用:代码中包含大 ...

  10. 设计模式:状态模式(State Pattern)

    作者:Wang Juqiang  创建于:2012-07-16 出处:http://www.cnblogs.com/wangjq/archive/2012/07/16/2593485.html 收录于 ...

最新文章

  1. 系统管理员在企业中的职业定位及发展方向 连载(三)
  2. 2021第六届数维杯大学生数学建模竞赛赛题_B 中小城市地铁运营与建设优化设计
  3. 如何改变“便宜没好货”的这类用户心理?
  4. python的数与字符串
  5. android ble蓝牙接收不到数据_Android蓝牙4.0 Ble读写数据详解 -2
  6. java Flink滚动时间窗口聚合TumblingProcessingTimeWindows运算例子
  7. 9、包、访问控制、import、static、static代码块、final、抽象类、接口、instanceof、多态...
  8. mysql之delete删除记录后数据库大小不变
  9. Python: 分数运算
  10. 公司周刊-非常6+1—营销平台小组
  11. # 畸变矫正_拒绝拍照边缘畸变 坚果Pro 3 Smartisan OS v7.2.0系统体验
  12. unity摄像头实物识别_“千万别让女朋友擦倒车摄像头,太tm可怕了哈哈哈哈哈!”...
  13. 怎么解决Myeclipse导入项目中文乱码?
  14. html5刮刮卡,canvas 实现刮刮卡
  15. 度秘语音引擎app_语音引擎下载
  16. 数据结构与算法分析(十七)--- 怎么用回溯剪枝高效穷举所有可行解?
  17. ios隐私政策_新的iOS 14已经揭露了严重的隐私问题
  18. 100脚的STM32F103VE单片机通过FSMC接口读写DS12C887时钟芯片中的寄存器
  19. 联调中通wincall平台-踩坑指南
  20. ubuntu20.04基础入门日记V1.0

热门文章

  1. 腾讯云 python接口_python调用腾讯云短信接口
  2. sql 取一个月日期去掉周末的所有日期_LeetCode:SQL
  3. 拓端tecdat|R语言Bass模型进行销售预测
  4. (1)深度学习_梯度下降与优化
  5. 案例7-3 统计工龄 (20 分)(简单)
  6. mysql 执行查询_MySQL执行一个查询的过程
  7. 白话搭建一个简单的微服系统
  8. hibernate教程笔记7
  9. 牛津大学数学与计算机科学课程,牛津大学之数学专业
  10. 双重差分模型能做固定效应吗_互助问答第213期:模型中的固定效应问题