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

在软件开发过程中,很多对象也会像水和信号灯一样具有多种状态,这些状态在某些情况下能够相互转换,而且对象在不同的状态下也将有不同的行为。最直接的解决方案是将所有可能考虑到,然后使用if else 语句来进行不同情况的处理,但是这种硬编码方法在对待复杂状态的判断就显得力不从心了,增加新的状态或修改一个状态都有可能会导致原有的程序大幅度·的修改。

我们可以将不同的状态设为对应的状态对象,再将状态抽象化调用,便不必考虑复杂的状态逻辑。

现在我们来用状态模式描述灯的亮与暗即状态转换。

抽象状态接口类:

 public interface LightState {
public void PressSwitch(Light light);//每种状态可以向其他状态转换 需要将灯的实体传入状态 类 以便于状态类对灯进行更多的动作
}

具体状态类:

 public class LightOff implements LightState {

     @Override
public void PressSwitch(Light light) {
System.out.println("现在灯暗着");
light.setState(new LightOn());
} }
 public class LightOn implements LightState {

     @Override
public void PressSwitch(Light light) {
System.out.println("现在灯亮着");
light.setState(new LightOff());
} }

山下文角色:

 public class Light {
private LightState state;//灯存在属性为它的状态 public Light(LightState state) {
super();
this.state = state;
} public LightState getState() {
return state;
} public void setState(LightState state) {
this.state = state;
}
/*
* light 自身并无太多功能 不同状态的行为依托于具体的状态 将自身需要传入并调用具体状态的方法操作自身
*/
public void pressSwhitch(){
state.PressSwitch(this);
}
}

客户测试类:

 public class StatePattern {

     public static void main(String[] args) {
Light light = new Light(new LightOff());//创建实体灯并附初始状态暗着 light.pressSwhitch();
light.pressSwhitch(); } }

运行结果:

现在灯暗着
现在灯亮着

状态模式(State)(开关灯,状态实例为类,不同状态,不同行为)的更多相关文章

  1. 大话设计模式--状态模式 State -- C++实现实例

    1.状态模式: 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就像是改变了其类. 状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂, 把状态的判断逻辑转移到表示不同状态的一系列类 ...

  2. 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)

    说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对“状态模式”并不陌生,因为我们之前使用到了状态模式进行重构.上一篇博客我们 ...

  3. 状态模式(State Pattern)

    当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂 ...

  4. 大熊君说说JS与设计模式之------状态模式State

    一,总体概要 1,笔者浅谈 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式. 状态模式主要解决的是当控制一个对象状态的条件表达式过于 ...

  5. C#设计模式——状态模式(State Pattern)

    一.概述在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为.如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代码结构 ...

  6. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  7. 设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  8. 北风设计模式课程---状态模式State(对象行为型)

    北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...

  9. 状态模式(State)-设计模式

    软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板.软件模式并非仅限于设计模式,还包括 架构模式.分析模式和过程模式等,实际上,在软件生存期的每一个阶段都存在着一些被认 ...

  10. 二十四种设计模式:状态模式(State Pattern)

    状态模式(State Pattern) 介绍允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它所属的类. 示例有一个Message实体类,对它的操作有Insert()和Get()方法, ...

随机推荐

  1. Jenkins 自动部署

      一.安装插件[系统管理 → 插件管理 ] 为了通过SSH上传war包,我们需要安装Publish Over SSH 插件. 二.添加SSH 服务器[系统管理→系统设置] 参数说明: Name:ss ...

  2. 使用maven搭建Hibernate

    使用maven搭建Hibernate框架(web项目) create table USERS ( ID NUMBER not null primary key, NAME ), PASSWORD ), ...

  3. springboot新手脱坑之无法下载依赖包

    1. Apache maven 3.39配置 1.环境变量自己配置, 2.配置阿里云镜像和本地仓库 <localRepository>D:\Apache\maven\repository& ...

  4. Pycharm2019.1.3安装程序以及教程

    链接:https://pan.baidu.com/s/1TF--EyCUQgmPeXFaCMJm8w 提取码:5vme

  5. C++的注释

    ### 1.2 注释 **作用**:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码 **两种格式** 1. **单行注释**:// 描述信息  - 通常放在一行代码的上方,或者一条语句的 ...

  6. Spark中使用Java编程的常用方法

    原文引自:http://blog.sina.com.cn/s/blog_628cc2b70102w9up.html 一.初始化SparkContext System.setProperty(" ...

  7. Linux 实用指令(5)--组管理和权限管理

    目录 组管理和权限管理 1 Linux组基本介绍 2 文件/目录 所有者 2.1 查看文件的所有者 2.2 修改文件所有者 3 组的创建 3.1 基本指令 3.2 应用实例 4 文件/目录 所在组 4 ...

  8. nginx 配置文件备份 nginx.conf and vhosts

    bogon:vhosts xingchong$ brew services restart nginx Stopping `nginx`... (might take a while) ==> ...

  9. PCA降维的前世今生

    PCA降维的数学原理 PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分 ...

  10. AM历史消息及文件记录删除

    1.下载 folderclear.bat 文件 2.用编辑方式打开这个文件 3.对里面的参数做修改 4.这个批处理文件,保留了 完整的一个月的消息记录 (如 今天是 2017.3.15 ,那么 清除数 ...