zoukankan      html  css  js  c++  java
  • 设计模式-状态模式(State)

    状态模式是行为模式的一种,状态模式允许改变对象内部状态来改变对象的行为。

    角色和职责:

    1.上下文(Context)-Order

       拥有内部的状态

    2.状态接口(Status)-State:

        一个所有具体状态的共同接口;任何状态都实现这个相同的接口,这样一来状态之间可以互相替换

    3.具体状态(Concrete State)-:

       

    UML图:

    具体源码:

    /**
     * 状态接口类
     */
    public abstract class State {
        protected int owner_order_status = 0;//当前状态对象的具体状态
        protected State next_state;//当前状态的下一个状态
        public State(int owner_order_status,State next_state){
            this.owner_order_status = owner_order_status;
            this.next_state = next_state;
        }
    
        /**
         * 处理
         * @param orderStatus
         */
        protected  void handler(int orderStatus){
            if(!isOwner(owner_order_status,orderStatus)){
                if(next_state != null){
                    //非当前对象,继续到下一个对象中查找
                    next_state.handler(orderStatus);
                    return;
                }
                System.out.println("当前订单状态未定义");
                return;
            }
            diaplay();
        }
    
        /**
         * 是否当前对象
         * @return
         */
        public boolean isOwner(int owner_order_status,int orderStatus){
            if(owner_order_status == orderStatus){
                return true;
            }
            return false;
        }
    
        abstract void diaplay();
    }
    /**
     * 订单创建
     */
    public class OrderCreateState extends State
    {
        public OrderCreateState(int owner_order_status, State next_state) {
            super(owner_order_status, next_state);
        }
    
        @Override
        void diaplay() {
            System.out.println("订单创建");
        }
    }
    /**
     * 订单支付
     */
    public class OrderPayState extends State {
    
        public OrderPayState(int owner_order_status, State next_state) {
            super(owner_order_status, next_state);
        }
    
        @Override
        void diaplay() {
            System.out.println("订单支付");
        }
    }
    /**
     * 订单完成
     */
    public class OrderSuccessState extends State{
        public OrderSuccessState(int owner_order_status, State next_state) {
            super(owner_order_status, next_state);
        }
    
        @Override
        void diaplay() {
            System.out.println("订单完成");
        }
    }
    /**
     * 订单状态关闭
     */
    public class OrderCloseState extends State{
        public OrderCloseState(int owner_order_status, State next_state) {
            super(owner_order_status, next_state);
        }
    
        @Override
        void diaplay() {
            System.out.println("订单状态关闭");
        }
    }
    /**
     * 订单
     */
    public class Order {
        private State orderState;
        public Order(){
            orderState = new OrderCreateState(1,
                    new OrderPayState(2,
                            new OrderSuccessState(3,
                                    new OrderPayState(4,null))));
        }
    
        public State getOrderState() {
            return orderState;
        }
    }
    public class Main {
        public static void main(String[] args) {
            Order order = new Order();
            State orderState = order.getOrderState();
            orderState.handler(1);//订单创建
            orderState.handler(2);//订单支付
            orderState.handler(3);//订单完成
            orderState.handler(4);//订单关闭
            orderState.handler(5);//订单未定义
        }
    }

    结果:

    订单创建
    订单支付
    订单完成
    订单支付
    当前订单状态未定义

    源码地址:https://github.com/qjm201000/design_pattern_state.git

  • 相关阅读:
    查杀木马利器,clamav
    zabbix运行久了以后效率会变慢的原因分析
    oracle sqlplus
    3000价位电脑配置实践
    phpmyadmin 万能密码漏洞
    nginx 的防cc攻击
    减少tcp TIME_WAIT 的数量
    nginx平滑升级
    心太大
    CentOS5.2下安装mplayer
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10112481.html
Copyright © 2011-2022 走看看