博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】—— 状态模式State
阅读量:6223 次
发布时间:2019-06-21

本文共 2092 字,大约阅读时间需要 6 分钟。

  模式意图

  允许一个对象在内部改变它的状态,并根据不同的状态有不同的操作行为。

  例如,水在固体、液体、气体是三种状态,但是展现在我们面前的确实不同的感觉。通过改变水的状态,就可以更改它的展现方式。

  应用场景

  1 当一个对象的行为,取决于它的状态时

  2 当类结构中存在大量的分支,并且每个分支内部的动作抽象相同,可以当做一种状态来执行时。

  模式结构

  

  Context 环境角色,里面包含状态对象

class Context{    private State state;    public void setState(State state) {        this.state = state;    }    public void operation(){        state.operation();    }}

  State 状态的抽象接口

interface State{    public void operation();}

  ConcreteState 具体的状态角色

class ConcreteState1 implements State{    public void operation(){        System.out.println("state1 operation");    }}class ConcreteState2 implements State{    public void operation(){        System.out.println("state2 operation");    }}class ConcreteState3 implements State{    public void operation(){        System.out.println("state3 operation");    }}

  全部代码

1 package com.xingoo.test.design.state; 2 class Context{ 3     private State state; 4     public void setState(State state) { 5         this.state = state; 6     } 7     public void operation(){ 8         state.operation(); 9     }10 }11 interface State{12     public void operation();13 }14 class ConcreteState1 implements State{15     public void operation(){16         System.out.println("state1 operation");17     }18 }19 class ConcreteState2 implements State{20     public void operation(){21         System.out.println("state2 operation");22     }23 }24 class ConcreteState3 implements State{25     public void operation(){26         System.out.println("state3 operation");27     }28 }29 public class Client {30     public static void main(String[] args) {31         Context ctx = new Context();32         State state1 = new ConcreteState1();33         State state2 = new ConcreteState2();34         State state3 = new ConcreteState3();35         36         ctx.setState(state1);37         ctx.operation();38         39         ctx.setState(state2);40         ctx.operation();41         42         ctx.setState(state3);43         ctx.operation();44     }45 }

  运行结果

state1 operationstate2 operationstate3 operation

 

本文转自博客园xingoo的博客,原文链接:,如需转载请自行联系原博主。
你可能感兴趣的文章
linux学习一个服务(未完)
查看>>
View的setTag和getTag使用
查看>>
maven跳过单元测试-maven.test.skip和skipTests的区别以及部分常用命令
查看>>
电子书下载:Silverlight 4 Business Intelligence Software
查看>>
Android startActivityForResult()的用法
查看>>
正则域名
查看>>
Delphi中COM自动化对象中使用事件
查看>>
WebAPI前置知识:HTTP与RestfulAPI
查看>>
单一职责原则
查看>>
让vs2008与vs2012同时打开同一个项目文件
查看>>
单片机沉思录——再谈static
查看>>
MongoDB空间查询
查看>>
nullnullDefining and Launching the Query 定义和启动查询
查看>>
MySQL InnoDB的一些参数说明
查看>>
PHP安全编程:跨站请求伪造CSRF的防御(转)
查看>>
.net 4.5如何使用Async和Await进行异步编程
查看>>
Android实现系统重新启动
查看>>
C++面向对象程序设计的一些知识点(3)
查看>>
DEDECMS网站管理系统Get Shell漏洞
查看>>
linux概念之分区与文件系统
查看>>