美文网首页
设计模式(12)-状态模式

设计模式(12)-状态模式

作者: zhglance | 来源:发表于2019-06-24 17:15 被阅读0次

状态模式(State Pattern)中,对象的行为依赖于它的状态(属性),类的行为是随着类自身的状态改变而改变。常用于if...else分支语句,但状态不宜太多。

一、需求举例:

1.当工程师处于忙碌状态时,不接受新的项目开发需求;
2.当工程师处于不忙状态时,接受新的项目开发需求。

二、类图

三、代码实例

1.状态父类:State

package com.lance.state;

public abstract class State {

    public static final String BUSY = "busy";

    public static final String IDLE = "idle";


    protected String state;

    public String getState() {
        return state;
    }

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



    public void exe(EngineerContext context) {
        System.out.println("do default.");
    }
}

2.忙工程师类:BusyEngineer

package com.lance.state;

public class BusyEngineer extends State {

    public BusyEngineer(String state) {
        this.state = state;
    }


    @Override
    public void exe(EngineerContext context) {
        System.out.println("Engineer is busy refuse new project requirements.");
        context.setState(this);
    }
}

3.空闲工程师类:IdleEngineer

package com.lance.state;

public class IdleEngineer extends State {

    public IdleEngineer(String state) {
        this.state = state;
    }

    @Override
    public void exe(EngineerContext context) {
        System.out.println("Engineer is idle accept new project requirements.");
        context.setState(this);
    }
}

4.上下文类:EngineerContext

package com.lance.state;

public class EngineerContext {
    private State state;

    public State getState() {
        return state;
    }

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

5.主类:StatePattern

package com.lance.state;

public class StatePattern {

    public static void main(String[] args) {
        System.out.println("==========start==========");

        EngineerContext engineerContext = new EngineerContext();
        State state = new IdleEngineer(State.IDLE);
        state.exe(engineerContext);


        System.out.println("current state:" + engineerContext.getState().getState());

        System.out.println("=======================");


        state = new BusyEngineer(State.BUSY);
        state.exe(engineerContext);

        System.out.println("current state:" + engineerContext.getState().getState());

        System.out.println("==========end==========");

    }
}

输出结果:

==========start==========
Engineer is idle accept new project requirements.
current state:idle
=======================
Engineer is busy refuse new project requirements.
current state:busy
==========end==========

相关文章

  • 设计模式(12)-状态模式

    状态模式(State Pattern)中,对象的行为依赖于它的状态(属性),类的行为是随着类自身的状态改变而改变。...

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • Java 设计模式(12) —— 状态模式

    一、状态模式 能根据内部状态的变化,改变对象的行为,看起来好像修改了类 二、示例 智能糖果机:需要设计一款自助购买...

  • 设计模式——状态模式

    设计模式——状态模式 在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 优点: 减少...

  • 设计模式-状态设计模式

    1.定义 对于某个操作,由于其状态的不同,表现出的行为会不同(如遥控器进行音量增加的操作,在电视是开机状态下是可以...

  • 设计模式——状态模式

    前言 设计模式是指导一个程序猿以更好的姿态处理一些问题,而不再像刚学编程的我们,只会使用if-else分支语句,或...

  • 设计模式--状态模式

    基本常识:策略模式与状态模式是双胞胎,在出生时才分开。 假设公司有个糖果机,1当糖果机由糖果,投入25分钱,转动曲...

  • 设计模式——状态模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Patte...

  • 设计模式《状态模式》

    引言   上一节我们说了策略模式。这一节我们讲讲策略模式的双胞胎弟弟:状态模式,这个模式大家可能不常见,也不常用,...

  • 设计模式——状态模式

    定义 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行...

网友评论

      本文标题:设计模式(12)-状态模式

      本文链接:https://www.haomeiwen.com/subject/yhioqctx.html