`
阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》,state pattern,状态模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com)
[正文]:
  人的状态变化:


 
  状态模式类图:


/**
 * 状态模式:state pattern
 *
 * 不使用状态模式时,代码可能会是这样:
 * if (state.equals("awake")){
 *        System.out.println("awake:工作.");
 * }
 * else if(state.equals("asleep")){
 *        System.out.println("asleep:做梦.");
 * }
 * else ...
 *
 * @version 2009-5-18
 * @author Winty(wintys@gmail.com)
 */
public class StateTest{
    public static void main(String[] args){
        Person person = new Person();

        person.doAction();

        person.setState(new Asleep());
        person.doAction();
    }
}

/**
 *环境:Context
 */
class Person{
    private State state = new Awake();

    public void setState(State state){
        this.state = state;
    }

    public void doAction(){
        state.doAction();
    }
}

/**
 *抽象状态:State
 */
interface State{
    public void doAction();
}

/**
 *具体状态
 */
class Awake implements State{
    public void doAction(){
        System.out.println("awake:工作.");
    }
}

/**
 *具体状态
 */
class Asleep implements State{
    public void doAction(){
        System.out.println("asleep:做梦.");
    }
}
  • 大小: 28.6 KB
  • 大小: 5.8 KB
分享到:
评论

相关推荐

    设计模式——原版的设计模式

    状态模式允许一个对象在其内部状态改变时改变它的行为,看起来它好像修改了它的类;策略模式定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,策略对象改变算法的执行策略;职责链模式避免将请求的...

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的String方法 ...

    软件设计精要与模式原代码

    如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、责任链模式(Chain of Responsibility)、命令模式(...备忘录模式(Memento)、状态模式(State)和解释器模式(Interpreter)...

    petshop 4.0 5.0 微软原版设计模式

    10. 状态模式(State):状态模式用于表示对象的不同状态及其行为,例如PetShop中购物车的状态可能有空、添加商品、结算等,每种状态下有不同的行为。 以上设计模式的运用,使得PetShop在保持代码清晰、模块化的...

    java设计模式_原创

    其中包括责任链模式、命令模式、迭代器模式、访问者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。责任链模式通过建立处理请求的对象链,使得请求可以在链上传递,直到被某个对象...

    23种java设计模式.pdf

    * State(状态模式):使用状态机来实现对象的状态转换。 * Observer(观察者模式):使得对象能够观察其他对象的变化。 * Visitor(访问模式):提供了一种方法来访问对象的元素。 * Command(命令模式):使用命令...

    Qt for IOS 获取暗黑模式状态

    对于QML部分,可以创建一个C++的Qt Quick模块,将这个功能暴露给QML,或者通过信号和槽机制将暗黑模式的状态传递给QML组件: ```cpp // 在C++中创建一个信号 class DarkModeNotifier : public QObject { Q_OBJECT ...

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式

    1. **Originator(原发器)**:这是使用备忘录模式的核心对象,它负责创建一个备忘录来存储其内部状态,并且可以使用备忘录来恢复它的状态。在C#中,这个角色通常会有一个私有的内部类或者结构体来实现备忘录,这样...

    设计模式之备忘录模式(Memento)

    - **非侵入性**:备忘录模式不会破坏原发器的封装性,因为它只通过接口进行通信,而不直接访问内部状态。 - **灵活**:可以为不同的状态创建多个备忘录,支持多级撤销/重做。 - **易于实现**:只需创建一个备忘录类...

    原版PPT和源码

    8. 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象的状态。 9. 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不...

    原创-设计模式实现代码

    - 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 - 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的...

    java 设计模式试题

    这种模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 ### 10. 迪米特法则 迪米特法则(D) 也称为最少知识原则或“不要和陌生人说话”。这一原则建议...

    常用设计模式例题(原创)

    观察者模式是一种行为型模式,定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。`observer`目录下的代码可能包含了事件发布者(Subject)和事件订阅者...

    设计模式之装饰模式:以售卖咖啡为例

    这种模式的核心在于装饰者和组件接口的统一,使得装饰者可以替代原对象并添加额外的功能。在"设计模式之装饰模式:以售卖咖啡为例"的场景中,我们可以详细解析其应用。 首先,咖啡的选择过程可以看作是基础产品...

    设计模式-备忘录

    备忘录模式是一种常用的设计模式,它在软件工程中用于保存对象的状态,以便在需要时恢复到之前的状态。这种模式的主要目标是实现数据的安全存储,同时保持对象的封装性,避免对外部对象直接访问其内部状态。在iOS...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    8. **状态模式**:允许对象在其内部状态改变时改变其行为,对象看起来似乎修改了它的类。 9. **访问者模式**:定义一个访问者的接口,用于访问一个对象结构中的元素,并定义一个访问操作在元素上的实现。 10. **迭代...

    JavaScript 设计模式(高清扫描版本)- 张容铭

    3. 行为型模式:这些模式关注对象之间的交互和职责分配,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。在JavaScript中...

    C语言设计模式.pdf

    本文件中提到了单件模式、工厂模式、抽象工厂模式、访问者模式、状态模式、命令模式、解释器模式、备忘录模式、观察者模式、桥接模式、建造者模式、中介者模式、策略模式、适配器模式、装饰模式、享元模式、代理模式...

    状态机的亲身经验小结(原创版)

    3. **状态模式**:这是一种面向对象的设计模式,通过封装状态行为,允许在运行时改变对象的行为。 4. **哈希表/映射**:存储状态和行为的关联,使得状态转换更加灵活。 在实际项目中,状态机常用于: - **协议解析*...

    设计模式备忘录模式PPT学习教案.pptx

    需要注意的是,备忘录模式通常与状态模式结合使用,状态模式允许对象在其内部状态改变时改变其行为。在撤销/重做系统中,备忘录模式保存不同状态,而状态模式则定义了这些状态及状态间的转换。 总的来说,备忘录...

Global site tag (gtag.js) - Google Analytics