不同状态有不同的行为
适用场合:控制一个对象状态转换的条件表达式过于复杂时
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模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了. 不只是根据状态,也有根据属性.如果...
State模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来像是改变了它的类。这种模式常被用于处理具有多种状态的对象,使得对象的状态转换更加清晰,代码更易于理解和维护。 在State模式中,...
State模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态转换,使得代码更易于理解和维护。 State模式的核心概念是状态对象,每个状态对象...
State模式是设计模式中的一种行为模式,它允许对象在内部状态改变时改变其行为,对象看起来好像修改了它的类。这种模式将一个对象的状态抽象出来,封装成独立的类,使得对象可以在不同的状态下表现出不同的行为,而...
Android中StateMachine机制 对与State改变切换这种常见常用的处理, 只是各个平台框架中处理的方法不同, ...在Android中使用的了StateMachine机制就是一个State模式的应用, StateMachine是非常的强大和精妙。
3. **复杂度考量**:虽然State模式能够清晰地表示状态转换,但如果状态较少且转换逻辑简单,则可能不需要使用State模式,因为引入额外的类可能会增加不必要的复杂度。 #### 四、State模式的实例解析 本节将以自动...
Java 设计模式之 State 模式 State 模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。该模式的主要思想是将对象的状态和行为分离,使用不同的状态子类来实现不同的行为。 何时使用 State 模式...
Java 设计模式之 State 模式详解 State 模式是 Java 设计模式的一种,用于解决状态切换问题。当对象的状态改变时,对象的行为也随之改变。State 模式将状态和行为分离,实现了状态切换的灵活性和可扩展性。 定义:...
标题和描述均提到了"C#面向对象设计模式"中的State状态模式,这表明文章的核心内容是围绕State模式在C#编程语言中的应用展开。State模式是一种行为设计模式,旨在允许对象在其内部状态改变时,其行为也能相应地改变...
Java设计模式中的State模式是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为。State模式的核心思想是将状态相关的代码封装到独立的对象中,这样可以使得对象在其状态改变时,表现出不同的行为,而无需...
State模式是一种行为设计模式,它的主要目的是将状态与行为封装在一起,使得对象在状态改变时,其行为也随之改变。在Java中,State模式通常通过创建一系列的子类来表示不同的状态,并让每个子类实现特定状态下的行为...
Java设计模式中的State模式是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为。State模式的核心思想是封装可能改变的行为到相应的状态对象中,让对象在其内部状态改变时可以调用不同的行为方法,而不是...
State模式的核心思想是将一个对象的状态行为封装在独立的类中,这样可以使得对象在不改变其类的情况下,通过改变内部状态来改变其行为。这种模式通常用于当一个对象的行为基于它的状态并且状态变化时,行为也相应地...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,使对象看起来好像修改了它的类。在Java中,状态模式通常用于将状态相关的逻辑从对象主体中分离出来,使得对象的行为可以根据其状态动态地更新。...
State模式允许一个对象在其内部状态改变时改变它的行为,对象看起来像是改变了它的类。 #### Observer模式 Observer模式定义了对象之间的一种一对多依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象...
### 状态模式(State Pattern) #### 概念与定义 状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,使对象看起来像是修改了它的类。该模式通过引入一个代表各种状态的类以及一个行为随着这些...