设计模式笔记_23_状态模式

A

package com.maom.design.D_23_State.A;

/**
 * @Title: D_23_State_A
 * @Description: 23_状态模式
 * @Author maohb
 * @Version 1.0
 */
public class D_23_State_A {

    public static void main(String[] args) {
        Person person = new Person();

        person.setHour(777);
        person.doSomething();

        person.setHour(7);
        person.doSomething();

        person.setHour(12);
        person.doSomething();
    }

}


class Person {
    private int hour;
    public int getHour() {
        return hour;
    }
    public void setHour(int hour) {
        this.hour = hour;
    }
    public void doSomething(){
        if (hour == 7)
            System.out.println("A_吃早餐");
        else if (hour == 12)
            System.out.println("B_吃午餐");
        else if (hour == 18)
            System.out.println("C_吃晚饭");
        else
            System.out.println("No_未定义" + hour);
    }
}


B

package com.maom.design.D_23_State.B;

/**
 * @Title: D_23_State_B
 * @Description: 23_状态模式
 * @Author maohb
 * @Version 1.0
 */
public class D_23_State_B {

    public static void main(String[] args) {
        Person person = new Person();

        person.setHour(12);
        person.doSomething();

        person.setHour(7);
        person.doSomething();

        person.setHour(777);
        person.doSomething();

        person.setHour(12);
        person.doSomething();
    }

}


class Person {
    private int hour;
    private State state;
    public int getHour() {
        return hour;
    }
    public void setHour(int hour) {
        this.hour = hour;
    }
    public void doSomething(){
        if(hour == 7) {
            state = new State_A();
            state.doSomething();
        } else if(hour == 12) {
            state = new State_B();
            state.doSomething();
        } else if(hour == 18) {
            state = new State_C();
            state.doSomething();
        } else {
            state = new NoState();
            state.doSomething();
        }
    }
}

/** 状态行为抽象类 */
abstract class State {
    public abstract void doSomething();
}

class State_A extends State {
    public void doSomething() {
        System.out.println("A_吃早餐");
    }
}

class State_B extends State{
    public void doSomething() {
        System.out.println("B_吃午餐");
    }
}

class State_C extends State {
    public void doSomething() {
        System.out.println("C_吃晚饭");
    }
}

class NoState extends State {
    public void doSomething() {
        System.out.println("No_未定义");
    }
}


C

package com.maom.design.D_23_State.C;

/**
 * @Title: D_23_State_C
 * @Description: 23_状态模式
 * @Author maohb
 * @Version 1.0
 */
public class D_23_State_C {

    public static void main(String[] args) {
        Person person = new Person();

        person.setHour(7);
        person.doSomething();

        person.setHour(12);
        person.doSomething();

        person.setHour(777);
        person.doSomething();

        person.setHour(12);
        person.doSomething();
    }

}


class Person {
    private int hour;
    private State state;
    public int getHour() {
        return hour;
    }
    public void setHour(int hour) {
        this.hour = hour;
    }
    public Person() {
        // 初始化 状态位
        state = new State_A();
    }
    public void doSomething(){
        state.doSomething(this);
        // 恢复初始状态位
        state = new State_A();
    }
    public State getState() {
        return state;
    }
    public void setState(State state) {
        this.state = state;
    }
}

/** 状态行为抽象类 */
abstract class State {
    public abstract void doSomething(Person person);
}

class State_A extends State {
    public void doSomething(Person person) {
        if(person.getHour() == 7) {
            System.out.println("A_吃早餐");
        } else {
            person.setState(new State_B());
            person.doSomething();
        }
    }
}

class State_B extends State{
    public void doSomething(Person person) {
        if(person.getHour() == 12) {
            System.out.println("B_吃午餐");
        } else {
            person.setState(new State_C());
            person.doSomething();
        }
    }
}

class State_C extends State {
    public void doSomething(Person person) {
        if(person.getHour() == 18) {
            System.out.println("C_吃晚饭");
        } else {
            person.setState(new NoState());
            person.doSomething();
        }
    }
}

class NoState extends State {
    public void doSomething(Person person) {
        System.out.println("No_未定义" + person.getHour() );
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值