Java设计模式-状态模式(State)

 

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

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

package com.xtfggef.dp.state;  /** * 状态类的核心类 * 2012-12-1 * @author erqing * */  
public class State {  private String value;  public String getValue() {  return value;  }  public void setValue(String value) {  this.value = value;  }  public void method1(){  System.out.println("execute the first opt!");  }  public void method2(){  System.out.println("execute the second opt!");  }  
}  
package com.xtfggef.dp.state;  /** * 状态模式的切换类   2012-12-1 * @author erqing *  */  
public class Context {  private State state;  public Context(State state) {  this.state = state;  }  public State getState() {  return state;  }  public void setState(State state) {  this.state = state;  }  public void method() {  if (state.getValue().equals("state1")) {  state.method1();  } else if (state.getValue().equals("state2")) {  state.method2();  }  }  
}  

测试类:

public class Test {  public static void main(String[] args) {  State state = new State();  Context context = new Context(state);  //设置第一种状态  state.setValue("state1");  context.method();  //设置第二种状态  state.setValue("state2");  context.method();  }  
}  

输出:

execute the first opt!
execute the second opt!

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

 

转载于:https://www.cnblogs.com/hwaggLee/p/4508609.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Prometheus的.NET 4.x应用服务监控

【.NET监控】| 总结/Edison Zhou0Why 监控?Edison所在团队95%以上的应用都是基于.NET 4.5开发的,只能跑在Windows Server服务器上的IIS中,公司运维也没有意愿对Windows Server进行有效的管理和提供监控支持,整得我们无法及时查看有…

高效沟通的7C原则

2019独角兽企业重金招聘Python工程师标准>>> 怎样确保沟通的顺畅和高效性呢?成功人士已经总结了很多方法,七项基本原则是一种基本的方法,起到了检查列表的作用,在你发送信息之前,对照检查可以帮助你确认信息…

WTMPlus 1.4 Uniapp来了

点击上方蓝字关注我们1.4版本长期以来,WTM都是后台管理系统的开发利器,对于移动端支持的不够。这次WTMPlus 1.4我们加入了对UniApp的支持,你可以轻松的使用WTMPlus同时制作后台管理系统和各种移动端小程序了。前后台模式切换用户现在可以自由…

php真随机数,php 的伪随机数与真随机数实例详解

这篇文章主要介绍了PHP的伪随机数与真随机数详解,本文首先讲解了真随机数和伪随机数的相关概念,并给出了比用mt_rand()函数产生更好的伪随机数的一段例子代码,需要的朋友可以参考下首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪随…

C#中的表达式和运算符

欢迎您成为我的读者,希望这篇文章能给你一些帮助。前言今天和大家一起学习下C#中的表达式和运算符,都是很基础的知识点。在日常的编码过程中,对于表达式和运算符我们每天都在使用。比如像下面的代码int age27;就是一种表达式。运算符是一个符…

C#利用Socket实现客户端之间直接通信

2019独角兽企业重金招聘Python工程师标准>>> 实验功能: 设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C&#xff0c…

如何在画面中摆放大量图片

2019独角兽企业重金招聘Python工程师标准>>> 有设计经验的一般都知道,版式设计需要对画面元素之间的关系有充分的认识,并能够在足够有限空间内合理布局,将图形与文字合理结合,下面就来给大家介绍下版式设计的方法。 如…

ASP.NET Core 替换 Action 实际执行方法

RequestDelegate上次,我们在《如何判断当前请求的API类型》中查看endpoints.MapControllers()实现时,最终定位到ActionEndpointFactory.cs,其中有这样一段代码:private static RequestDelegate CreateRequestDelegate() {// We do…

最新版富文本编辑器UEditor操作教程

最近项目中使用到了富文本编辑器,选择的是百度的UEditor。所以对其进行了研究,发现最近发布了新版本,与以往的用法有的改变。一下对UEditotr 的是用做一下详细的介绍。 首先是UEditotr的下载,下载地址:http://ueditor.…

Servlet请求转发中文乱码解决

2019独角兽企业重金招聘Python工程师标准>>> 在Servlet的使用过程中,如果在请求转发的同时需要获得输出流并且写出数据的时候,需要设定resp 的编码格式,否则的话,跳转之后的页面很可能会出现中文乱码的问题。 转载于:h…

NodeJs .net core connect Azure service bus

最近有个项目需要使用nodejs 使用语言是Typescript 发送消息给Azure service bus消息格式是XML.但是发送到queue中并不是xml格式,而是string.string格式的消息直到看到azure/service-bus sdk 接口的定义才发现.如果接收消息应用不是javascript sdk框架(因为使用是.net sdk框架接…

c++代码寻找USB00端口并添加打印机

USB00*端口的背景 插入USB端口的打印机,安装打印机驱动,在控制面板设备与打印机处的打印机对象上右击,可以看到打印机端口。对于不少型号,这个端口是USB001或USB002之类的。 经观察,这些USB00*端口并不是打印机驱动所…

IOS调用WCF提供的服务方法,但是方法的参数是WCF那边自定义的对象,这样有办法调用么,如果可以IOS应该怎么传参呢?请问有了解的么,...

最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里;刚好把最近学习的WCF利用上,本以为是个比较简单的功能应该很好实现,没想到其中碰到不少问题,在网上搜索很久一直没有想到的解决方案,最后实现…

ABP vNext微服务架构详细教程——项目部署

1基础配置在之前的文章中,我们已经配置了Kubernetes集群并安装了管理工具Kubesphere,文章地址为:https://mp.weixin.qq.com/s/MgpdMv5A-fYxN7XY8N9Djw登录Kubesphere页面,打开工作台,在平台资源选项卡中点击“企业空间…

offsetTop和scrollTop的差别

近期想写个组件,结果被这两个属性搞的有点晕,查了下文档和资料,对这两个属性总结例如以下: 一直以来对offsetLeft,offsetTop,scrollLeft,scrollTop这几个方法非常迷糊,花了一天的时间…

quartz (一) 基于 Quartz 开发企业级任务调度应用

本文转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/ Quartz 基本概念及原理 Quartz Scheduler 开源框架 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。该项目于 2009 年被 Terracotta 收购&…

C# 11 中的参数 null 检查

C# 11 中的参数 null 检查IntroC# 11 将引入一个新的操作符 !! 来简化我们代码中的对于参数的 null 检查,昨天发布的 .NET 7 Preview 1 已经支持了这一语法,感兴趣的不妨来试一下吧,下面我们就来看一下如何使用吧Prepare如果你想在本地代码中…

cms的 php代码,KingCMS/PHP可执行代码

实例:Example :{king:title/}{king:content/}作者:{king:_author/}上面的代码没有什么特别的地方,但客户的要求有了变化,他想在详细页的内容开始前调用缩略图,没有则忽略。所以问题也来了,因为有的文章有缩略图,有的没…

CentOS单机安装k8s并部署.NET 6程序

学习云原生,k8s 是一个基础,为了做一些实验,单机部署是最方便的,下面将介绍在 CentOS 中单机安装 k8s ,并将一个 .NET 6 的程序发布到 k8s 中。环境宿主机:Mac 10.15.7CentOS版本:7.6内存&#…

php session缓存,扫盲:php session缓存至memcached中的方法

memcached是一套分布式的快取系统,当初是DangaInteractive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSDlicens更改为:session.save_handler memcachesession.save_path"tcp://12…