UML中有个图叫状态图,描述了对象的状态。
一般来说,对于有状态的对象,在处理动作时,会根据不同的状态得到不同的行为结果。
比如说,一扇旋转门,我们推,如果是关闭的,那么他就打开,如果我们再推,他就关闭。
State设计模式,通过把状态封装,通过接口隔离,使得我们不需要用if else等语句硬编码。缺点是如果状态过多,那么将会有很多的状态类。
状态模式的UML如下图所示:
下面通过一个开关程序来说明状态模式。
这个开光类似遥控器上的开机,关机,当机器是开的状态时,他执行关闭,当机器是关闭的状态时,他执行打开动作。
电视类(一个可以拥有状态的类,可以实现一个 Stateable接口,不过这样在这里设计过度了)
public class Television {
TelState state;
public Television(){
state = new TelCloseState();
}
public void setState(TelState state){
this.state = state;
}
public TelState getState(){
return this.state;
}
遥控器,这其实是个调用者类。这里不停的按开关按钮。
public class Controller {
Television television;
public Controller(){
television = new Television();
}
public void clickButton(){
television.getState().change(television);
}
public static void main(String[] arg){
Controller controller = new Controller();
controller.clickButton();
controller.clickButton();
controller.clickButton();
controller.clickButton();
}
}
下面是关键的状态接口。接口中的Television其实最好为一个接口,Stateable接口。
public interface TelState {
public void change(Television tel);
}
下面是具体的状态。对于Off状态的电视,改变后就是开(On)。
public class TelOffState implements TelState {
@Override
public void change(Television tel) {
// TODO Auto-generated method stub
System.out.println("Televison On!");
tel.setState(new TelOnState());
}
}
对于On状态的电视,改变后就是关(Off)
public class TelOnState implements TelState {
@Override
public void change(Television tel) {
// TODO Auto-generated method stub
System.out.println("Televison Close!");
tel.setState(new TelCloseState());
}
}
来看下运行结果:
Televison On!
Televison Close!
Televison On!
Televison Close!
这就是一个简单的状态机了。点击遥控器的行为,在不同状态,有不同的功能作用。
状态模式运用在一些具有状态的对象上。
- 大小: 11.9 KB
分享到:
相关推荐
`ApprovalProcess`是上下文类,它持有一个`State`对象并调用其方法来改变审批状态。这个类还负责在状态变化时执行相应的业务逻辑,如通知相关人员、更新数据库等。 4. **状态转换**: 当审批状态发生变化时,上...
4. **实现方式**:在Java或其他面向对象语言中,通常会定义一个接口或抽象类作为State,然后创建多个实现类代表不同状态。Context持有一个State对象的引用,可以通过更改这个引用来改变对象的行为。 5. **优缺点**...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且在不同的状态下,对象的行为也相应地变化。在Java中,我们可以利用接口、...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来好像对象改变了它的类。在Java中,状态模式通常通过定义不同的状态类和一个上下文类来实现,其中上下文类持有状态对象并调用其方法来响应...
模板模式是一种行为设计模式,它定义了一个操作中的程序骨架,将一些步骤延迟到子类中实现。这使得子类可以在不改变程序结构的情况下重新定义程序中的某些步骤。 模板模式的优点: * 可以定义一组算法,并且这些...
状态模式是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为。该模式的核心思想是定义一系列的状态类,并将这些状态类封装起来,使得外部客户端无需关心对象的具体状态即可调用相应的方法。 ####...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得对象的行为与其状态紧密相关,通过改变对象的状态,来改变对象的行为。 ...
c++设计模式-行为型模式-状态模式;qt工程;c++简单源码; 状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
- 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的状态,并在该对象之外保存这个状态,以便以后恢复。 - 观察者模式(Observer):定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,...
`Machine`类有一个`changeState()`方法来切换状态,以及一些其他方法如`operate()`,这些方法会根据当前状态进行不同的操作。 ```cpp class Machine { public: void operate(); void changeState(State* state); ...
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态转换逻辑,使代码结构更清晰,易于理解和维护。 在C++中实现状态模式,我们通常会...
3. **具体状态(Concrete State)**: 每一个具体状态类实现一个与上下文的一个状态相关的行为。 ```java public class ConcreteStateA implements State { @Override public void operation() { // 具体状态A的...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且在不同的状态下,对象的行为也相应地变化。 状态模式的主要组件包括: 1...
状态模式是一种行为设计模式,它使对象能够在内部状态改变时改变其行为,看起来好像改变了它的类。这种模式常用于处理对象在不同状态下表现各异的情况,避免了复杂的条件语句,提高了代码的可读性和可维护性。 在...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在Java中,这种模式常用于处理对象在不同状态下的多种行为,使得代码更加灵活,易于维护和扩展。 状态模式的核心...
- **State模式**:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 - **Observer模式**:定义了对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会...
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...
- 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎改变了它的类。 - 策略模式(Strategy):定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立...