博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用C#改写Head First Design Patterns--State(原创)
阅读量:4135 次
发布时间:2019-05-25

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

状态模式

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace State

{
    public interface State
    {
        //投入25分硬币
         void insertQuarter();
        //退出硬币
         void ejectQuarter();
        //推把手
         void turnCrank();
        //得到糖果
         void dispense();
    }
}

 

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace State

{
    public class NoQuarterState : State
    {
        GumballMachine gm;

        public NoQuarterState(GumballMachine g)

        {
            this.gm = g;
        }

        #region State 成员

        void State.insertQuarter()

        {
            System.Console.WriteLine("您刚才投入了25分钱");
            gm.setState(gm.hasQuarterState);
        }

        void State.ejectQuarter()

        {
            System.Console.WriteLine("您没有投币");
        }

        void State.turnCrank()

        {
            System.Console.WriteLine("您没有投币");
        }

        void State.dispense()

        {
            System.Console.WriteLine("您没有投币");
        }

        #endregion

    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace State

{
    public class soldOutState :State
    {
        GumballMachine gm;

        public soldOutState(GumballMachine g)

        {
            this.gm = g;
        }

        #region State 成员

        void State.insertQuarter()

        {
            System.Console.WriteLine("已售完,不接受投币");
        }

        void State.ejectQuarter()

        {
            System.Console.WriteLine("已售完,不接受退币");
        }

        void State.turnCrank()

        {
            System.Console.WriteLine("已售完!不可摇杆");
        }

        void State.dispense()

        {
            System.Console.WriteLine("已售完!");
        }

        #endregion

    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace State

{
    public class SoldState:State
    {
        GumballMachine gm;

        public SoldState(GumballMachine g)

        {
            this.gm = g;
        }

        #region State 成员

        void State.insertQuarter()

        {
            System.Console.WriteLine("等待出果,不得投币");
        }

        void State.ejectQuarter()

        {
            System.Console.WriteLine("等待出果,不得退币");
        }

        void State.turnCrank()

        {
            System.Console.WriteLine("等待出果,不得摇两次");
        }

        void State.dispense()

        {
            //System.Console.WriteLine("您的糖果,请笑纳");

            //gm.releaseBall();

            if (gm.count > 0)

            {
                gm.setState(gm.noQuarterState);
            }
            else
            {
                gm.setState(gm.soldOutState);
            }
        }

        #endregion

    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace State

{
    public class WinnerState:State
    {
        GumballMachine gm;

        public WinnerState(GumballMachine g)

        {
            this.gm = g;
        }

        #region State 成员

        void State.insertQuarter()

        {
            System.Console.WriteLine("等待出果,不得投币");
        }

        void State.ejectQuarter()

        {
            System.Console.WriteLine("等待出果,不得退币");
        }

        void State.turnCrank()

        {
            System.Console.WriteLine("等待出果,不得摇两次");
        }

        void State.dispense()

        {
            System.Console.WriteLine("您赢了一颗果!");
            if (gm.count > 0)
            {
                gm.setState(gm.noQuarterState);
            }
            else
            {
                gm.setState(gm.soldOutState);
            }
        }

        #endregion

    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace State

{
    public  class GumballMachine
    {
        public State soldOutState;
        public State noQuarterState;
        public State hasQuarterState;
        public State soldState;
        public State winnerState;

        State state ;

       
        //糖果数量
        public int count = 0;

        public GumballMachine(int num)

        {
            soldOutState = new soldOutState(this);
            noQuarterState = new NoQuarterState(this);
            hasQuarterState = new hasQuarterState(this);
            soldState = new SoldState(this);
            soldState = new WinnerState(this);
            if (num > 0) this.count = num;

            state = noQuarterState;

   

        }

        public void insert()

        {
            state.insertQuarter();
        }
        public void eject()
        {
            state.ejectQuarter();
        }

        public void turn()

        {
            state.turnCrank();
        }

        public void setState(State s)
        {
            this.state = s;
        }

        public void releaseBall()

        {
            if (state == soldState)
            {
                System.Console.WriteLine("箱子提醒您:请查收糖果!");
                state.dispense();
            }
            else
            {
                System.Console.WriteLine("箱子提醒您:摇杆后取果!");
            }

            if (count != 0)

            {
                count--;
            }

        }

    }

}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace State

{
    public class hasQuarterState : State
    {
        GumballMachine gm;

        public hasQuarterState(GumballMachine g)

        {
            this.gm = g;
        }

        #region State 成员

        void State.insertQuarter()

        {
            System.Console.WriteLine("您已经投了25分钱,不用再投");
        }

        void State.ejectQuarter()

        {
            System.Console.WriteLine("这是您的25分,请收取");
            gm.setState(gm.noQuarterState);
        }

        void State.turnCrank()

        {
            System.Console.WriteLine("请等待糖果");
            gm.setState(gm.soldState);
        }

        void State.dispense()

        {
            System.Console.WriteLine("请等待糖果!");
        }

        #endregion

    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace State

{
    class Program
    {
        static void Main(string[] args)
        {
            GumballMachine g = new GumballMachine(5);

            g.insert();

            g.eject();
            g.turn();
            g.releaseBall();
            g.turn();

            g.insert();

            g.turn();
            g.releaseBall();

            g.insert();

            g.turn();
            g.releaseBall();

            g.insert();

            g.turn();
            g.releaseBall();

            g.insert();

            g.turn();
            g.releaseBall();

            g.insert();

            g.turn();
            g.releaseBall();

            g.insert();

            g.turn();
            g.releaseBall();

            System.Console.ReadLine();

        }
    }
}

 

转载地址:http://yvpvi.baihongyu.com/

你可能感兴趣的文章
Linux基础系列-Kernel 初始化宏
查看>>
<iOS>关于自定义description的一点用法
查看>>
Unix 命令,常用到的
查看>>
DLL中建立进程共享数据段需要注意的语法问题
查看>>
服务器端技术----Http请求的处理过程
查看>>
C语言-预处理指令2-条件编译
查看>>
C语言-预处理指令3-文件包含
查看>>
C语言-变量类型
查看>>
C语言-static和extern关键字1-对函数的作用
查看>>
C 语言-static和extern关键字2-对变量的作用
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
还不会正则表达式?看这篇!
查看>>
100道+ JavaScript 面试题,助你查漏补缺
查看>>
JavaScript深入理解之闭包
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
25个构建Web项目的HTML建议,你需要了解一下!
查看>>
【web素材】02-10款大气的购物商城网站模板
查看>>
6种方式实现JavaScript数组扁平化(flat)方法的总结
查看>>
如何实现a===1 && a===2 && a===3返回true?
查看>>