`
androidssh
  • 浏览: 115167 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 
阅读更多

定义: GOF《设计模式》中给状态模式下的定义为:允许一个对象在其内部状态改变时改变它的行为。

 

先看一个例子:

 

  1. package com.state;  
  2. public class KissingPrincess {  
  3.     // 标志位,标志是青蛙还是王子。  
  4.     private boolean isFrog = true;  
  5.     // 根据isFrog进行不同的操作。  
  6.     public void greet() {  
  7.         if (isFrog)  
  8.             System.out.println("frog!");  
  9.         else  
  10.             System.out.println("prince!");  
  11.     }  
  12.     // 将isFrog设置成false。  
  13.     public void kiss() {  
  14.         isFrog = false;  
  15.     }  
  16.       
  17.     // 主函数。  
  18.     public static void main(String[] args) {  
  19.         KissingPrincess prince = new KissingPrincess();  
  20.         prince.greet();  
  21.         prince.kiss();  
  22.         prince.greet();  
  23.     }  
  24. }  

 

输出结果:

frog!
prince!

 

这个例子中,用了一个变量isFrog来标识是青蛙还是王子,如果是王子的话,输出"prince!",是青蛙的话,输出:“frog!”。

本例中的写法,用个朋友的话来说,只是“入门级程序员的写法”。在java中,要时时注意OOP(Object Oriented Programming)的概念。

如果状态很多的话,就会使用很多if else 语句,不仅繁琐难于维护,而且没有体现出面向对象编程的思想。

 

对上例应用状态模式后,可以变成如下的代码:

 

  1. package com.state;  
  2. public class KissingPrincess2 {  
  3.       
  4.     private State state = new Frog();  
  5.       
  6.     private interface State {  
  7.         void response();  
  8.     }  
  9.       
  10.     private class Frog implements State {  
  11.           
  12.         @Override  
  13.         public void response() {  
  14.             System.out.println("frog!");  
  15.         }  
  16.     }  
  17.       
  18.     private class Prince implements State {  
  19.           
  20.         @Override  
  21.         public void response() {  
  22.             System.out.println("prince!");  
  23.         }  
  24.     }  
  25.       
  26.     public void greet() {  
  27.         state.response();  
  28.     }  
  29.       
  30.     public void change(State state) {  
  31.         this.state = state;  
  32.     }  
  33.       
  34.     public static void main(String[] args) {  
  35.         KissingPrincess2 prince2 = new KissingPrincess2();  
  36.         prince2.greet();  
  37.         prince2.change(prince2.new Prince());  
  38.         prince2.greet();  
  39.     }  
  40. }  

 

 

输出结果:

frog!
prince!

 

上述例子就是state模式的基本思想,希望读者朋友们认真体会。

 

这里再举个state模式的例子:

玩过cs的人都知道,cs里面有很多枪,ak47啊,m16啊,但是不管什么枪,你拿起以后,都只用扣动扳机就能够把子弹打出去。这就和我们state模式思想是一样的,不管底层怎么实现(比如上述例子中的判断是frog还是prince,然后执行不同的操作),外层的接口都不变(greet方法)。

分享到:
评论

相关推荐

    java 设计模式之状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来好像对象改变了它的类。在Java中,状态模式通常通过定义不同的状态类和一个上下文类来实现,其中上下文类持有状态对象并调用其方法来响应...

    java设计模式之-状态模式-实现

    在Java设计模式中,状态模式的核心概念包括以下几个部分: 1. **状态(State)**:这是个接口或抽象类,定义了状态对象的公共行为。每个状态都对应一个特定的操作集,这些操作可能会影响对象的状态。 2. **具体...

    试谈java设计模式之State.docx

    Java 设计模式之 State 模式 State 模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。该模式的主要思想是将对象的状态和行为分离,使用不同的状态子类来实现不同的行为。 何时使用 State 模式...

    试谈java设计模式之State.pdf

    Java 设计模式之 State 模式详解 State 模式是 Java 设计模式的一种,用于解决状态切换问题。当对象的状态改变时,对象的行为也随之改变。State 模式将状态和行为分离,实现了状态切换的灵活性和可扩展性。 定义:...

    java设计模式之State.docx

    Java设计模式中的State模式是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为。State模式的核心思想是将状态相关的代码封装到独立的对象中,这样可以使得对象在其状态改变时,表现出不同的行为,而无需...

    java设计模式之State.pdf

    State模式是一种行为设计模式,它的主要目的是将状态与行为封装在一起,使得对象在状态改变时,其行为也随之改变。在Java中,State模式通常通过创建一系列的子类来表示不同的状态,并让每个子类实现特定状态下的行为...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    java-设计模式-状态模式-模拟审批流程-二级审批 完整代码

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在这个示例中,我们关注的是如何使用Java实现一个审批流程,特别是涉及二级审批的场景。这个压缩包文件包含了一个...

    试谈java设计模式之State.doc

    Java设计模式中的State模式是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为。State模式的核心思想是封装可能改变的行为到相应的状态对象中,让对象在其内部状态改变时可以调用不同的行为方法,而不是...

    java设计模式之状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。...在Java编程中,熟练掌握和应用设计模式,如状态模式,能够提升代码质量,使程序更加灵活、可扩展和易于维护。

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...

    JAVA设计模式之行为模式 责任链模式和状态模式

    【JAVA设计模式】在软件开发中,设计模式是解决常见问题的经验总结,它们提供了一种在特定场景下高效、可扩展的解决方案。本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态...

    《Java设计模式》课后答案-刘伟.rar

    《Java设计模式》是刘伟教授的一本关于设计模式的教材,主要面向高等学校的学生和对Java编程有深入兴趣的开发者。设计模式是软件工程中的一种重要思想,它封装了在特定场景下的问题解决方案,可以提高代码的可读性、...

    23种java设计模式.pdf

    " JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...

    java 设计模式之State(状态模式)

    Java 设计模式之 State(状态模式) Java 设计模式之 State(状态模式)是行为型模式之一,主要解决的问题是当一个对象的行为取决于它的状态,并且它需要在运行时刻根据不同的状态对其行为进行改变时,如何对其进行...

    设计模式之状态模式Java版本实现

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且根据不同的状态,对象的行为也相应地变化。 在Java中实现状态模式,我们...

    设计模式之状态模式(State)

    状态模式是一种行为设计模式,它使对象能够在内部状态改变时改变其行为,看起来好像改变了它的类。这种模式常用于处理对象在不同状态下表现各异的情况,避免了复杂的条件语句,提高了代码的可读性和可维护性。 在...

    java设计模式-状态

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在Java中,这种模式常用于处理对象在不同状态下的多种行为,使得代码更加灵活,易于维护和扩展。 状态模式的核心...

    Java设计模式刘伟书本中模拟考试答案

    在《Java设计模式》这本书的模拟试题及其参考答案中,涉及了多条设计模式的知识点,以及它们的应用场景和实现方法。现在将这些知识点详细地解释如下: 1. 开闭原则(Open-Closed Principle, OCP): 开闭原则是面向...

    JAVA设计模式-chm版

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...

Global site tag (gtag.js) - Google Analytics