博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
状态模式
阅读量:7103 次
发布时间:2019-06-28

本文共 2131 字,大约阅读时间需要 7 分钟。

hot3.png

package org.designPattern.state23;

public abstract class State {
    public abstract void  doSomething(Person person);
}

package org.designPattern.state23;

public class LState extends State{
    public void doSomething(Person person) {
        if(person.getHour() == 12) {
            System.out.println("吃中饭");
        } else {
            person.setState(new SState());
            person.doSomething();
        }
    }
}

package org.designPattern.state23;

public class MState extends State {
    public void doSomething(Person person) {
        if(person.getHour() == 7) {
            System.out.println("吃早餐");
        } else {
            person.setState(new LState());
            person.doSomething();
        }
    }
}
package org.designPattern.state23;
public class NoState extends State {
    public void doSomething(Person person) {
        System.out.println(person.getHour() +  "未定义");
    }
}

package org.designPattern.state23;

public 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 MState();
    }
    
    public void doSomething(){
//        if(hour == 7) {
//            state = new MState();
//            state.doSomething();
//        } else if(hour == 12) {
//            state = new LState();
//            state.doSomething();
//        } else if(hour == 18) {
//            state = new SState();
//            state.doSomething();
//        } else {
//            state = new NoState();
//            state.doSomething();
//        }
        state.doSomething(this);
        //复位,都所以方法以后再执行。
        state = new MState();
    }
    public State getState() {
        return state;
    }
    public void setState(State state) {
        this.state = state;
    }
}

package org.designPattern.state23;

public class SState extends State {
    public void doSomething(Person person) {
        if(person.getHour() == 18) {
            System.out.println("吃晚饭");
        } else {
            person.setState(new NoState());
            person.doSomething();
        }
    }
}
package org.designPattern.state23;
public class MainClass {
    public static void main(String[] args) {
        Person person = new Person();
        
        person.setHour(7);
        person.doSomething();
        
        person.setHour(12);
        person.doSomething();
        
        person.setHour(18);
        person.doSomething();
        
        person.setHour(8);
        person.doSomething();
        
        person.setHour(7);
        person.doSomething();
        
        person.setHour(18);
        person.doSomething();
        
    }
}

转载于:https://my.oschina.net/goudingcheng/blog/539192

你可能感兴趣的文章
整理了一份React-Native学习指南
查看>>
前端框架VUE----webpack打包工具的使用
查看>>
Visual Studio问题解答(不断更新)
查看>>
web前端----css属性
查看>>
购物商城---前台条件筛选
查看>>
如何动态创建元素
查看>>
深入理解javascript作用域系列第一篇——内部原理
查看>>
poj1019
查看>>
[Selenium] WebDriver 操作 HTML5 中的 drag/drop
查看>>
LCS(打印全路径) POJ 2264 Advanced Fruits
查看>>
【Python爬虫学习笔记(2)】正则表达式(re模块)相关知识点总结
查看>>
矩阵乘法优化求斐波那契
查看>>
72. js EXTJS grid renderer用法
查看>>
YUM 安装及清理
查看>>
R语言心得-网页文本分析
查看>>
虚拟机Ubuntu14/15启用root用户登录
查看>>
Codeforces 837 D Round Subset DP 思维
查看>>
java.text.NumberFormat用法
查看>>
MFC使用TRACKMOUSEEVENT触发mouseHover和mouseLeave
查看>>
Apache中PHP5.3 php5.4如何使用ZEND
查看>>