java设计模式进阶_state

原创 2016年08月30日 15:38:57

这里写图片描述

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : State.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public interface State {
    public void onEnterState();
    public void observe();
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : PeacefulState.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public class PeacefulState implements State {

    private Mammoth mammoth;

    public PeacefulState(Mammoth mammoth) {
        this.mammoth = mammoth;
    }

    public void onEnterState() {
        System.out.println(String.format("%s calms down.", mammoth));
    }

    public void observe() {
        System.out.println(String.format("%s is calm and peaceful.", mammoth));
    }
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : AngryState.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public class AngryState implements State {

    private Mammoth mammoth;

    public AngryState(Mammoth mammoth) {
        this.mammoth = mammoth;
    }

    public void onEnterState() {
        System.out.println(String.format("%s gets angry!", mammoth));
    }

    public void observe() {
        System.out.println(String.format("%s is furious!", mammoth));
    }
}


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Mammoth.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public class Mammoth {

    private State state;

    public Mammoth(){
        state = new PeacefulState(this);
    }

    public void timePasses() {
        if(state.getClass().equals(PeacefulState.class))
        {
            changeStateTo(new AngryState(this));
        } else {
            changeStateTo(new PeacefulState(this));
        }
    }

    private void changeStateTo(State newState) {
        this.state = newState;
        this.state.onEnterState();
    }

    public String toString() {
        return "The mammoth";
    }

    public void observe() {
        this.state.observe();
    }
}


public class App {

    public static void main(String[] args) {
        Mammoth mammoth = new Mammoth();
        mammoth.observe();
        mammoth.timePasses();
        mammoth.observe();
        mammoth.timePasses();
        mammoth.observe();
    }
}




/*The mammoth is calm and peaceful.
The mammoth gets angry!
The mammoth is furious!
The mammoth calms down.
The mammoth is calm and peaceful.
*/







版权声明:本文为博主原创文章,未经博主允许不得转载。

java设计模式之State-状态机

State模式的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 何时使用? State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif els...

JAVA设计模式-State

一个对像有不同的状态,不同的状态有不同的行为。也许你会说在方法里加上switch case语句就行了,这样的确能实现这样的方法,但是,就像前面一些设计模式的目的一样,这种方法不具可扩展性,因此我们需要...

java设计模式进阶_decorator

// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : Hostile...

java设计模式进阶_memento

// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : StarMem...

JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法

JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法 学完我们的java之旅,其实收获还是很多的,但是依然还...

java设计模式进阶_flyweight

// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : Potion....

java设计模式进阶_interpreter

// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : Express...

java设计模式进阶_singleton

//示例: // // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : I...

java设计模式进阶_bridge

// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : MagicWe...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式进阶_state
举报原因:
原因补充:

(最多只允许输入30个字)