美文网首页
状态模式

状态模式

作者: 要学的东西太多了 | 来源:发表于2018-11-05 11:32 被阅读0次

状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。状态模式由抽象状态类(定义状态方法),具体状态类(实现具体的状态方法,改变内部状态,同时按条件改变和状态管理类的状态对象)和状态管理类(存储状态类对象)组成,比如人的一生,在各个阶段的状态,随着年龄增长而改变。

示例:

public class State {
    public static void main(String[] args){
        State state=new State();
        StateManager stateManager=state.new StateManager();
        stateManager.setState(state.new Child());
    }

    abstract class PersonState{
        protected int startAge,endAge;

        public PersonState(int startAge,int endAge) {
            this.startAge = startAge;
            this.endAge = endAge;
        }

        abstract void grow(StateManager manager);

        abstract void feature();
    }

    class Child extends PersonState{
        public Child() {
            super(0, 6);
        }

        @Override
        void grow(StateManager manager) {
            while (true) {
                startAge++;
                if (startAge > endAge) {
                    manager.setState(new Student());
                    break;
                }
                feature();
            }
        }

        @Override
        void feature() {
            System.out.println("我是个小屁孩,现在"+startAge+"岁,玩就是了");
        }
    }

    class Student extends PersonState{
        public Student() {
            super(7,22);
        }

        @Override
        void grow(StateManager manager) {
            while (true) {
                startAge++;
                if (startAge > endAge) {
                    manager.setState(new Adult());
                    break;
                }
                feature();
            }
        }

        @Override
        void feature() {
            System.out.println("我是个学生,现在"+startAge+"岁,学得头都大了");
        }
    }

    class Adult extends PersonState{
        public Adult() {
            super(23, 40);
        }

        @Override
        void grow(StateManager manager) {
            while (true) {
                startAge++;
                if (startAge > endAge) {
                    manager.setState(new Middle());
                    break;
                }
                feature();
            }
        }

        @Override
        void feature() {
            System.out.println("我是个加班狗,现在"+startAge+"岁,没钱没时间,苦逼");
        }
    }

    class Middle extends PersonState{
        public Middle() {
            super(41, 60);
        }

        @Override
        void grow(StateManager manager) {
            while (true) {
                startAge++;
                if (startAge > endAge) {
                    manager.setState(new Elderly());
                    break;
                }
                feature();
            }
        }

        @Override
        void feature() {
            System.out.println("我是个中年人,现在"+startAge+"岁,有点钱了,压力还是大啊");
        }
    }

    class Elderly extends PersonState{
        public Elderly() {
            super(61, 100);
        }

        @Override
        void grow(StateManager manager) {
            while (true) {
                startAge++;
                if (startAge > endAge) {
                    System.out.println("死啦死啦,活够了");
                    break;
                }
                feature();
            }
        }

        @Override
        void feature() {
            System.out.println("我是个老年人,现在"+startAge+"岁,遛遛狗,下下棋,等死");
        }
    }

    class StateManager{
        private PersonState state;

        public void setState(PersonState state) {
            this.state = state;
            this.state.feature();
            this.state.grow(this);
        }
    }
}

相关文章

  • State模式

    状态模式(State模式) 定义 状态模式,又称状态对象模式(Pattern of Objects for S...

  • 设计模式-状态模式

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

  • 状态模式(状态机模式)

    状态模式学习笔记 前言:文章从三方面简单阐述状态模式:是什么、为什么、如何做。这是我在工作之余自己的一些理解、思考...

  • C++设计模式(3)

    本文预览: 状态模式 组合模式 迭代器 职责链 命令 状态模式 定义:状态模式(State Pattern),允许...

  • 设计模式——状态模式

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

  • 第5章 -行为型模式-状态模式

    一、状态模式的简介 二、状态模式的优缺点 三、状态模式的实例

  • 状态模式

    Android进阶之设计模式 状态模式 定义: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了...

  • 状态模式

    状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。允许对象随着状态改变而改变行为。 策略...

  • 状态模式

    《大话设计模式》阅读笔记和总结。原书是C#编写的,本人用Java实现了一遍,包括每种设计模式的UML图实现和示例代...

  • 状态模式

    状态模式 一个对象有状态变化 每次状态变化都会触发一个逻辑 不能总是用 if...else 来控制 示例 交通灯信...

网友评论

      本文标题:状态模式

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