首页 > 其他分享 >设计模式之 State Pattern状态模式

设计模式之 State Pattern状态模式

时间:2023-10-08 15:33:20浏览次数:48  
标签:Customer hour Person Pattern void person State 设计模式 public

State模式允许对象在内部状态变化时,变更其行为,并修改其类;

优点:

定位指定状态的行为,并且针对不同状态来划分行为,使状态转换显式进行;

适用:

对象的行为依赖于其状态,并且该对象必须在运行时根据其状态修改其行为;

操作具有大量的以及多部分组成的取决于对象状态的条件语句;

 

 public class Bank
    {
        private int hour;
        private Person person;
        public void SetClock(int hour)
        {
            this.hour = hour;
            Console.WriteLine($"现在时间是{hour}点");
            if (hour > 8 && hour < 18)
                ChangeState(Customer.GetInstance());
            else ChangeState(Thief.GetInstance());
        }
        public void ChangeState(Person person)
        {
            this.person = person;
            person.SayHi();

        }

    }
    public interface Person
    {
        void SayHi();

    }
    public class Customer : Person
    {
        private static Customer customer = new Customer();
        public static Customer GetInstance() => customer;
        public void SayHi()
        {
            Console.WriteLine("我是客户,我来取钱");
        }
    }
    public class Thief : Person
    {
        private static Thief thief = new Thief();
        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);
            }
        
        }

标签:Customer,hour,Person,Pattern,void,person,State,设计模式,public
From: https://www.cnblogs.com/zhangdezhang/p/17749201.html

相关文章

  • 设计模式之 Template Method模版方法
    TemplateMethod模式提供了不重写方法的前提下,允许子类重载部分方法的方法;在操作中定义算法的框架,将一些步骤由子类实现,该模式可以再不修改算法结构的情况下,让子类重新定义算法的特定步骤;优点:代码重用的基础技术;适用:想要一次实现算法的不变部分,而使用子类实现算法的可变行为;......
  • 设计模式(七)桥接
    一、定义将抽象部分与它的实现部分解耦,使两者都能够独立变化,桥接模式是一种结构型模式。二、描述包含以下四个角色:1、Abstraction(抽象类):它是用于定义抽象类的接口,通常是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具......
  • mysqldump 导出来的文件,使用 source还原时报错“ASCII '\0' appeared in the stateme
    导出语句:mysqldump-uroot-pword--databasesdb1--tablestable1>./sqldumps/archive-table1-`date+"%Y%m%d_%H%M%S"`.sql导出后,使用source还原报错:ASCII'\0'appearedinthestatement,butthisisnotallowedunlessoption我开始以为是我导出的编码格式有问题,......
  • Python入门示例系列18 条件控制 Conditional Statements
    Python提供了bool类型来表示真(对)或假(错),比如常见的5>3比较算式,这个是正确的,在程序世界里称之为真(对),Python使用True来代表;再比如4>20比较算式,这个是错误的,在程序世界里称之为假(错),Python使用False来代表。True和False是Python中的关键字,当作为Python代码输入时,一......
  • typescript: Facade Pattern
     /***Facadepattern外观是一种结构型设计模式,能为复杂系统、程序库或框架提供一个简单(但有限)的接口。*TheFacadeclassprovidesasimpleinterfacetothecomplexlogicofoneor*severalsubsystems.TheFacadedelegatestheclientrequeststothe*......
  • Java设计模式之策略模式
    1.1 概述先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。定......
  • Android Jetpack 理解SavedStateHandle
    jetpack库理解SavedStateHandle作用和ViewModel协作,用于从Activity销毁重建中恢复ViewModel的相关状态数据,我们知道当Activity被安卓系统销毁和重建的时候会调用onSaveInstanceState和onRestoreInstanceState方法,这个方法对于ViewModel来说是无法感知的,SavedStateHandle填补了这......
  • 设计模式
    1.观察者模式 观察者模式(Observer)又称发布-订阅模式(Publish-Subscribe:Pub/Sub)。它是一种通知机制,让发送通知的一方(被观察方)和接收通知的一方(观察者)能彼此分离,互不影响。消息系统中,同步消息依次通知各个观察者,异步通知可以同时使所有观察者同时操作。2.迭代器模式迭代器模式(It......
  • 23种设计模式的图示总结概述(创建型模式和结构型模式)
    1、创建型模式1、简单工厂模式根据不同的需求(条件),创建出来不同的对象;2、工厂方法模式简单地说,就是不同的工厂分别制作不同的产品,这样能够避免上面的工厂出问题,全体待工的情况;3、抽象工厂模式出现新的概念——产品等级结构、产品族;不同的产品有不同的抽象产品,不同的工厂......
  • php 设计模式
    1.单例模式 单例模式顾名思义,就是只有一个实例。作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。......