`
gary0416
  • 浏览: 333527 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

State模式

阅读更多

不同状态有不同的行为
适用场合:控制一个对象状态转换的条件表达式过于复杂时

 

State.java

package com.gary.designpattern.state;

/**
 * 抽象状态
 * @author gary
 *
 */
public abstract class State {
	public abstract void greeting(Greeting g);
}

 

MorningState.java

package com.gary.designpattern.state;

/**
 * 早上状态
 * @author gary
 *
 */
public class MorningState extends State {

	@Override
	public void greeting(Greeting g) {
		if(g.getHour() <= 12){
			System.out.println("good morning!");
		}else{
			//超过12点转入下午状态
			g.setState(new AfternoonState());
			g.greeting();
		}
	}

}

 

AfternoonState.java

package com.gary.designpattern.state;

/**
 * 下午状态
 * @author gary
 *
 */
public class AfternoonState extends State {

	@Override
	public void greeting(Greeting g) {
		if(g.getHour() <= 18){
			System.out.println("good afternoon!");
		}else{
			//超过18点转入晚上状态
			g.setState(new EveningState());
			g.greeting();
		}
	}

}

 

EveningState.java

package com.gary.designpattern.state;

/**
 * 晚上状态
 * @author gary
 *
 */
public class EveningState extends State {

	@Override
	public void greeting(Greeting g) {
		System.out.println("good evening!");
	}

}

 

Greeting.java

package com.gary.designpattern.state;

public class Greeting{
	//状态
	private State state;
	//小时
	private double hour = 0;
	
	public Greeting(){
		//初始状态
		setState(new MorningState());
	}
	
	public void setHour(double hour) {
		this.hour = hour;
	}
	public double getHour() {
		return hour;
	}
	public void setState(State state) {
		this.state = state;
	}
	public State getState() {
		return state;
	}
	
	public void greeting(){
		getState().greeting(this);
	}

}

 

Test.java

package com.gary.designpattern.state;

/**
 * 测试
 * @author gary
 *
 */
public class Test {
	public static void main(String[] args) {
		Greeting g = new Greeting();
		g.setHour(9);
		g.greeting();
		
		g.setHour(13);
		g.greeting();
		
		g.setHour(20);
		g.greeting();
	}
}

 

分享到:
评论

相关推荐

    设计模式State模式源码

    State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了. 不只是根据状态,也有根据属性.如果...

    state模式

    State模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来像是改变了它的类。这种模式常被用于处理具有多种状态的对象,使得对象的状态转换更加清晰,代码更易于理解和维护。 在State模式中,...

    [行为模式] state模式

    State模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态转换,使得代码更易于理解和维护。 State模式的核心概念是状态对象,每个状态对象...

    C++ State模式

    State模式是设计模式中的一种行为模式,它允许对象在内部状态改变时改变其行为,对象看起来好像修改了它的类。这种模式将一个对象的状态抽象出来,封装成独立的类,使得对象可以在不同的状态下表现出不同的行为,而...

    Android学习 StateMachine与State模式

    Android中StateMachine机制 对与State改变切换这种常见常用的处理, 只是各个平台框架中处理的方法不同, ...在Android中使用的了StateMachine机制就是一个State模式的应用, StateMachine是非常的强大和精妙。

    轻松掌握state设计模式

    3. **复杂度考量**:虽然State模式能够清晰地表示状态转换,但如果状态较少且转换逻辑简单,则可能不需要使用State模式,因为引入额外的类可能会增加不必要的复杂度。 #### 四、State模式的实例解析 本节将以自动...

    试谈java设计模式之State.docx

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

    试谈java设计模式之State.pdf

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

    C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式

    标题和描述均提到了"C#面向对象设计模式"中的State状态模式,这表明文章的核心内容是围绕State模式在C#编程语言中的应用展开。State模式是一种行为设计模式,旨在允许对象在其内部状态改变时,其行为也能相应地改变...

    java设计模式之State.docx

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

    java设计模式之State.pdf

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

    试谈java设计模式之State.doc

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

    C++设计模式代码资源18_State.zip

    State模式的核心思想是将一个对象的状态行为封装在独立的类中,这样可以使得对象在不改变其类的情况下,通过改变内部状态来改变其行为。这种模式通常用于当一个对象的行为基于它的状态并且状态变化时,行为也相应地...

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

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,使对象看起来好像修改了它的类。在Java中,状态模式通常用于将状态相关的逻辑从对象主体中分离出来,使得对象的行为可以根据其状态动态地更新。...

    23种设计模式(C++).pdf

    - State模式:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 - Observer模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,所有依赖于它的对象都会得到通知并被自动...

    状态模式 State Pattern

    ### 状态模式(State Pattern) #### 概念与定义 状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,使对象看起来像是修改了它的类。该模式通过引入一个代表各种状态的类以及一个行为随着这些...

Global site tag (gtag.js) - Google Analytics