张德长

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

设计模式之 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);
}
}

posted on   张德长  阅读(6)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2022-10-08 自然语言处理NLP与深度学习(学习笔记)
点击右上角即可分享
微信分享提示