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

    package org.springframework.security.crypto.bcrypt;
    
    /**
     * 状态模式测试
     */
    public interface State {
        /**
         * 添加硬币
         */
         void insertCoin();
    
        /**
         * 退出硬币
         */
        void returnCoin();
    
        /**
         * 转动曲柄
         */
        void turnCrank();
    
        /**
         * 发放操作
         */
        void dispense();
    
        /**
         * 打印状态
         */
        void printstate();
    }
    

      

    package org.springframework.security.crypto.bcrypt;
    
    /**
     * 糖果机
     */
    public class CandyMachine {
        State mSoldOutState;
        State mOnReadyState;
        State mHasCoin;
        State mSoldState;
        State mWinnerState;
        private State state;
        private int count = 0;
    
        public CandyMachine(int count) {
            this.count = count;
            mSoldOutState = new SoldOutState(this);
            mOnReadyState = new OnReadyState(this);
            mHasCoin = new HasCoin(this);
            mSoldState = new SoldState(this);
            mWinnerState = new WinnerState(this);
            if (count > 0) {
                state = mOnReadyState;
            } else {
                state = mSoldOutState;
            }
        }
    
        public void setState(State state) {
            this.state = state;
        }
    
        public void insertCoin() {
            state.insertCoin();
        }
    
        public void returnCoin() {
            state.returnCoin();
        }
    
        public void turnCrank() {
            state.turnCrank();
            state.dispense();
        }
    
        void releaseCandy() {
    
            // TODO Auto-generated method stub
            if (count > 0) {
                count = count - 1;
                System.out.println("一块糖果推出!");
            }
    
        }
    
        public int getCount() {
            return count;
        }
    
        public void printstate() {
            state.printstate();
        }
    }
    

      

    package org.springframework.security.crypto.bcrypt;
    
    import java.util.Random;
    
    /**
     * 有硬币
     */
    public class HasCoin implements State {
        private CandyMachine mCandyMachine;
    
        public HasCoin(CandyMachine mCandyMachine) {
            this.mCandyMachine = mCandyMachine;
        }
    
        @Override
        public void insertCoin() {
            // TODO Auto-generated method stub
            System.out.println("你不能插入另一枚硬币!");
    
        }
    
        @Override
        public void returnCoin() {
            // TODO Auto-generated method stub
            System.out.println("硬币回归!");
            mCandyMachine.setState(mCandyMachine.mOnReadyState);
        }
    
        @Override
        public void turnCrank() {
            // TODO Auto-generated method stub
            System.out.println("转弯......!");
            Random ranwinner=new Random();
            int winner=ranwinner.nextInt(10);
            if(winner==0) {
                mCandyMachine.setState(mCandyMachine.mWinnerState);
    
            }else {
                mCandyMachine.setState(mCandyMachine.mSoldState);
            }
    
        }
    
        @Override
        public void dispense() {
        }
    
        @Override
        public void printstate() {
            // TODO Auto-generated method stub
            System.out.println("***HasCoin***");
    
        }
    }
    

      

    package org.springframework.security.crypto.bcrypt;
    
    /**
     * 在准备状态
     */
    public class OnReadyState implements State {
        private CandyMachine mCandyMachine;
        public OnReadyState(CandyMachine mCandyMachine){
            this.mCandyMachine=mCandyMachine;
        }
    
        @Override
        public void insertCoin() {
            System.out.println("你已经插入了一枚硬币,接下来,请转动曲柄!");
            mCandyMachine.setState(mCandyMachine.mHasCoin);
        }
    
        @Override
        public void returnCoin() {
            // TODO Auto-generated method stub
            System.out.println("你还没有插入硬币!");
    
        }
    
        @Override
        public void turnCrank() {
            // TODO Auto-generated method stub
            System.out.println("你转身,但你还没有插入硬币!");
    
        }
    
        @Override
        public void dispense() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void printstate() {
            // TODO Auto-generated method stub
            System.out.println("***OnReadyState***");
    
        }
    }
    

      

    package org.springframework.security.crypto.bcrypt;
    
    /**
     * 出售完状态
     */
    public class SoldOutState implements State {
        private CandyMachine mCandyMachine;
        public SoldOutState(CandyMachine mCandyMachine)
        {
            this.mCandyMachine=mCandyMachine;
        }
    
        @Override
        public void insertCoin() {
            // TODO Auto-generated method stub
            System.out.println("你不能插入硬币,机器卖光了!");
    
        }
    
        @Override
        public void returnCoin() {
            // TODO Auto-generated method stub
            System.out.println("你不能回来,你还没有插入硬币!");
    
        }
    
        @Override
        public void turnCrank() {
            // TODO Auto-generated method stub
            System.out.println("你转过身来,但没有糖果!");
    
        }
    
        @Override
        public void dispense() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void printstate() {
            // TODO Auto-generated method stub
            System.out.println("***SoldState***");
    
        }
    }
    

      

    package org.springframework.security.crypto.bcrypt;
    
    /**
     * 售出操作
     */
    public class SoldState implements State {
        private CandyMachine mCandyMachine;
        public SoldState(CandyMachine mCandyMachine)
        {
            this.mCandyMachine=mCandyMachine;
        }
    
        @Override
        public void insertCoin() {
            // TODO Auto-generated method stub
            System.out.println("请稍等!我们给你一个糖果!");
    
        }
    
        @Override
        public void returnCoin() {
            // TODO Auto-generated method stub
            System.out.println("你还没有插入硬币!");
    
        }
    
        @Override
        public void turnCrank() {
            // TODO Auto-generated method stub
            System.out.println("我们给你一个糖果,让另一个什么都没有,!");
    
        }
    
        @Override
        public void dispense() {
            // TODO Auto-generated method stub
    
            mCandyMachine.releaseCandy();
            if (mCandyMachine.getCount() > 0) {
                mCandyMachine.setState(mCandyMachine.mOnReadyState);
            } else {
                System.out.println("Oo,out of candies");
                mCandyMachine.setState(mCandyMachine.mSoldOutState);
            }
    
    
    
        }
    
        @Override
        public void printstate() {
            // TODO Auto-generated method stub
            System.out.println("***SoldState***");
    
        }
    }
    

      

    package org.springframework.security.crypto.bcrypt;
    
    /**
     * 胜利者状态
     */
    public class WinnerState implements State {
        private CandyMachine mCandyMachine;
    
        public WinnerState(CandyMachine mCandyMachine) {
            this.mCandyMachine = mCandyMachine;
        }
    
        @Override
        public void insertCoin() {
            // TODO Auto-generated method stub
            System.out.println("请稍等!我们给你一个糖果!");
    
        }
    
        @Override
        public void returnCoin() {
            // TODO Auto-generated method stub
            System.out.println("你还没有插入硬币!");
    
        }
    
        @Override
        public void turnCrank() {
            // TODO Auto-generated method stub
            System.out
                    .println("我们给你一个糖果,让另一个什么都没有,!");
    
        }
    
        @Override
        public void dispense() {
            // TODO Auto-generated method stub
    
    
            mCandyMachine.releaseCandy();
            if (mCandyMachine.getCount() == 0) {
                mCandyMachine.setState(mCandyMachine.mSoldOutState);
            } else {
                System.out.println("你是赢家!你得到另一个糖果!");
                mCandyMachine.releaseCandy();
                if (mCandyMachine.getCount() > 0) {
                    mCandyMachine.setState(mCandyMachine.mOnReadyState);
                } else {
                    System.out.println("哦,糖果");
                    mCandyMachine.setState(mCandyMachine.mSoldOutState);
                }
            }
    
        }
    
        @Override
        public void printstate() {
            // TODO Auto-generated method stub
            System.out.println("***WinnerState***");
    
        }
    }
    

      

      @Test
        public void test01(){
            CandyMachine mCandyMachine = new CandyMachine(6);
    
            mCandyMachine.printstate();
    
            mCandyMachine.insertCoin();
            mCandyMachine.printstate();
    
            mCandyMachine.turnCrank();
    
            mCandyMachine.printstate();
    
            mCandyMachine.insertCoin();
            mCandyMachine.printstate();
    
            mCandyMachine.turnCrank();
    
            mCandyMachine.printstate();
    
        }
    

      

  • 相关阅读:
    Intern Day5
    PTA1007
    Intern Day5
    Intern Day2
    Intern Day5
    Intern Day2
    Intern Day2
    Intern Day2
    Intern Day1
    柯南剧场版17绝海的侦探
  • 原文地址:https://www.cnblogs.com/x-ll123/p/11003234.html
Copyright © 2011-2022 走看看