设计模式——状态模式
状态模式:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。
结构:Context环境类 :环境类中维护一个State对象,它定义了当前的状态 。
State:状态接口
ConcreteState: 具体的状态类,封装了每一个具体类的对应行为。
应用场景:
线程对象各个状态的切换
店房间状态的管理
账号的状态管理
看一个简单的Demo:
public interface State { void handle(); } class Booked implements State { @Override public void handle() { System.out.println("您已下单!"); } } class Payed implements State { @Override public void handle() { System.out.println("您已付款!"); } } class Sended implements State { @Override public void handle() { System.out.println("已发货!"); } } class InWay implements State { @Override public void handle() { System.out.println("送货中。。。"); } } class Recieved implements State { @Override public void handle() { System.out.println("已确认收货!"); } } public class Context { private State state; public Context() {} public Context(State state) { this.state = state; } public void setState(State state) { System.out.println("订单信息已更新!"); this.state = state; this.state.handle(); } } public class Client { public static void main(String[] args) { Context context = new Context(); context.setState(new Booked()); context.setState(new Payed()); context.setState(new Sended()); context.setState(new InWay()); context.setState(new Recieved()); } }
运行结果:
订单信息已更新!
您已下单!
订单信息已更新!
您已付款!
订单信息已更新!
已发货!
订单信息已更新!
送货中。。。
订单信息已更新!
已确认收货!
作者:Pickle
声明:对于转载分享我是没有意见的,出于对博客园社区和作者的尊重一定要保留原文地址哈。
致读者:坚持写博客不容易,写高质量博客更难,我也在不断的学习和进步,希望和所有同路人一道用技术来改变生活。觉得有点用就点个赞哈。
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112835275-168981902.gif)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112841431-2047172832.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112847494-1544911856.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112904385-918783221.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111120143119-1302805212.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112856369-1466718103.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112830416-794416355.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111113919510-1155220901.gif)