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

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

20、状态模式(State)

核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。

State类是个状态类,Context类可以实现切换,我们来看看代码:

[java] view plaincopy

  1. package com.xtfggef.dp.state;
  2. /**
    • 状态类的核心类
    • 2012-12-1
    • @author erqing
  3. */
  4. public class State {
  5. private String value;
  6. public String getValue() {
  7. return value;
  8. }
  9. public void setValue(String value) {
  10. this.value = value;
  11. }
  12. public void method1(){
  13. System.out.println("execute the first opt!");
  14. }
  15. public void method2(){
  16. System.out.println("execute the second opt!");
  17. }
  18. }
    [java] view plaincopy
  19. package com.xtfggef.dp.state;
  20. /**
    • 状态模式的切换类 2012-12-1
    • @author erqing
  21. */
  22. public class Context {
  23. private State state;
  24. public Context(State state) {
  25. this.state = state;
  26. }
  27. public State getState() {
  28. return state;
  29. }
  30. public void setState(State state) {
  31. this.state = state;
  32. }
  33. public void method() {
  34. if (state.getValue().equals("state1")) {
  35. state.method1();
  36. } else if (state.getValue().equals("state2")) {
  37. state.method2();
  38. }
  39. }
  40. }
    测试类:

[java] view plaincopy

  1. public class Test {
  2. public static void main(String[] args) {
  3. State state = new State();
  4. Context context = new Context(state);
  5. //设置第一种状态
  6. state.setValue("state1");
  7. context.method();
  8. //设置第二种状态
  9. state.setValue("state2");
  10. context.method();
  11. }
  12. }
    输出:

execute the first opt!

execute the second opt!
根据这个特性,状态模式在日常开发中用的挺多的,尤其是做网站的时候,我们有时希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等。

转载地址:http://wqbso.baihongyu.com/

你可能感兴趣的文章
linux系统运维企业常见面试题集合(三)
查看>>
Oracle查询表名及模糊查询
查看>>
Spark 实现自己的RDD,让代码更优雅
查看>>
PHP 精确运算
查看>>
Python基础-Python流程控制
查看>>
Windows Server 2012体验之卸载额外域控制器
查看>>
MySQL主从同步配置实现数据库备份
查看>>
单例设计模式
查看>>
监控Squid的开源工具MySAR
查看>>
linux解压 tar命令
查看>>
安装VMtools失败如何解决
查看>>
添加国际化文件
查看>>
iOS APP提交上架最新流程
查看>>
530A - UART
查看>>
华为服务器虚拟化部署
查看>>
1.3 Illustrator工作区的操作讲解
查看>>
MySQL服务器学习笔记!(一) ——数据库相关概念
查看>>
Eclipse 常用的快捷键及其他常用功能小结
查看>>
redis 分页查询
查看>>
shutdown命令的用法
查看>>