设计模式之 State Pattern状态模式
State模式允许对象在内部状态变化时,变更其行为,并修改其类;
优点:
定位指定状态的行为,并且针对不同状态来划分行为,使状态转换显式进行;
适用:
对象的行为依赖于其状态,并且该对象必须在运行时根据其状态修改其行为;
操作具有大量的以及多部分组成的取决于对象状态的条件语句;
/// <summary> /// 银行类,白天来银行的是客户,晚上来银行的是窃贼 /// 根据不同的时间,切换不同的状态,根据不同状态切换类及其行为 /// </summary> public class Bank { private int hour; private Person person; /// <summary> /// 设置时间,根据不同时间,设定不同状态 /// </summary> /// <param name="hour"></param> public void SetClock(int hour) { this.hour = hour; Console.WriteLine($"现在时间是{hour}点"); if (hour > 8 && hour < 18) ChangeState(Customer.GetInstance()); else ChangeState(Thief.GetInstance()); } /// <summary> /// 切换客户状态,使其具有不同的行为 /// </summary> /// <param name="person"></param> private void ChangeState(Person person) { this.person = person; person.SayHi(); } } /// <summary> /// 基类 /// </summary> public interface Person { void SayHi(); } /// <summary> /// 客户类,白天去银行 /// </summary> public class Customer : Person { /// <summary> /// 构造函数私有化 /// </summary> private Customer() { } private static Customer customer = new Customer(); /// <summary> /// 单例模式 /// </summary> /// <returns></returns> public static Customer GetInstance() => customer; public void SayHi() { Console.WriteLine("我是客户,我来取钱"); } } /// <summary> /// 窃贼类 ,晚上去银行 /// </summary> public class Thief : Person { /// <summary> /// 构造函数私有化 /// </summary> private Thief() { } private static Thief thief = new Thief(); /// <summary> /// 单例模式 /// </summary> /// <returns></returns> public static Thief GetInstance() => thief; public void SayHi() { Console.WriteLine("我是窃贼,我来偷钱"); } } public static void StatePatternTest() { Bank bank = new Bank(); int hour = 0; while (true) { bank.SetClock(hour); hour++; hour %= 24; Thread.Sleep(1000); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2022-10-08 自然语言处理NLP与深度学习(学习笔记)