美文网首页
{C#}设计模式辨析.状态

{C#}设计模式辨析.状态

作者: 码农猫爸 | 来源:发表于2021-08-13 05:12 被阅读0次

背景

  • 前序状态执行后,切换到后续状态
  • 与责任链异同
    • 责任链:遍历并下放到具体责任者处理要求
    • 状态:在不同状态中轮转处理要求

示例

using System;
using static System.Console;

namespace DesignPattern_State
{
    // 游戏类 =上下文类
    public class Game
    {
        public IState CurrentPlayer { get; set; }

        public void Play()
        {
            for (int turn = 0; turn < 10; turn++)
            {
                Write($"#{turn} ");
                CurrentPlayer.Handle(turn == 9);
            }
        }
    }

    // 状态接口
    public interface IState
    {
        IState Opposite { set; get; }
        void Handle(bool won = false);
    }

    // 玩家类 =具体状态
    public class Player : IState
    {
        private readonly Game game;
        private readonly string name;
        private Random random = new Random();

        // 因互相引用,延迟到属性(非构造器)中初始化
        public IState Opposite { set; get; }

        public Player(Game game, string name)
        {
            this.game = game;
            this.name = name;
        }

        public void Handle(bool won = false)
        {
            string seconds = new string('.', random.Next(1, 5));
            Write($"Thinking {seconds}");

            string info = won
                ? $"Player {this} won. Game over."
                : $"Player {this} played. Turn to player {Opposite}.";
            WriteLine(info);

            game.CurrentPlayer = Opposite;
        }

        public override string ToString() => name;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var game = new Game();

            var zhang = new Player(game, "Zhang");
            var li = new Player(game, "Li");
            zhang.Opposite = li;
            li.Opposite = zhang;

            game.CurrentPlayer = zhang;
            game.Play();

            ReadKey();
        }
    }
}

相关文章

  • {C#}设计模式辨析.状态

    背景 前序状态执行后,切换到后续状态 与责任链异同责任链:遍历并下放到具体责任者处理要求状态:在不同状态中轮转处理...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • {C#}设计模式辨析.命令

    背景 通过命令解耦接收者和调用者。 接收者,处理具体请求。 命令,绑定接收者和请求。 调用者=命令容器,可执行和撤...

  • {C#}设计模式辨析.策略

    背景 策略作为算法,可自由替换 示例

  • {C#}设计模式辨析.门面

    背景 复杂系统,可切割成多个相互独立的子系统并由子系统组合而成 与桥接的异同桥接的是维度,每个维度可由子类替换门面...

  • {C#}设计模式辨析.组合

    背景 处理枝(叶的集合)和叶结构 示例

  • {C#}设计模式辨析.代理

    背景 在原程序上加壳,ex. 壳=虚拟/保护/远程/日志记录 等 示例

  • {C#}设计模式辨析.原型

    背景 绕过构造器,快速创建已有原型的复制品。 复制品可与原型脱勾,独立修改属性或字段。 示例

  • {C#}设计模式辨析.抽象工厂

    背景 工厂模式也可应用到多类产品,单类产品请参考https://www.jianshu.com/p/09992d0...

  • {C#}设计模式辨析.桥接

    背景 桥接多个维度时 实现@抽象类:子类继承产生基础维度构造器传参其它维度(1-n)方法提炼或交互多个维度 示例

网友评论

      本文标题:{C#}设计模式辨析.状态

      本文链接:https://www.haomeiwen.com/subject/vtwqbltx.html