zoukankan      html  css  js  c++  java
  • 设计模式——状态模式

    状态模式:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。

    结构: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());
    		
    	}
    
    }
    

    运行结果:

    订单信息已更新!
    您已下单!
    订单信息已更新!
    您已付款!
    订单信息已更新!
    已发货!
    订单信息已更新!
    送货中。。。
    订单信息已更新!
    已确认收货!

  • 相关阅读:
    [转]在WEB下的客户端控件的开发应用
    [转]C#将文件保存到数据库中或者从数据库中读取文件
    [转]如何组织一个高效的开发团队
    [转]使用C#调用金诚信71x系列读卡器的DLL
    [转]统一建模语言UML轻松入门之综合实例
    [转]Web application 的压力测试 MS Web Application Stress Tool (was)
    [转]使用NUnit在.Net编程中进行单元测试
    国外著名人脸识别介绍文章
    js与as通信
    php访问mysql 封装
  • 原文地址:https://www.cnblogs.com/wxisme/p/4544432.html
Copyright © 2011-2022 走看看