dotSITE
Шаблоны проектирования Work in Murano Software. Вопросы/Ответы
новости материалы решения форумы группы настройки/о проекте

State

State позволяет задавать поведение объекта "на лету".

        namespace State_DesignPattern
        {
            using System;

            abstract class State 
            {
                protected string strStatename;      

                abstract public void Pour();
            }

            class OpenedState : State 
            {       
                public OpenedState ()
                {
                    strStatename = "Opened";
                }
                override public void Pour()
                {
                    Console.WriteLine("...pouring...");
                    Console.WriteLine("...pouring...");
                    Console.WriteLine("...pouring...");
                }
            }
            
            class ClosedState : State 
            {       
                public ClosedState()
                {
                    strStatename = "Closed";
                }
                override public void Pour()
                {
                    Console.WriteLine("ERROR - bottle is closed - cannot pour");
                }
            }

            class ContextColaBottle 
            {
                public enum BottleStateSetting {
                    Closed,
                    Opened
                };

                OpenedState openedState = new OpenedState();
                ClosedState closedState = new ClosedState();

                public ContextColaBottle ()
                {
                    // Initialize to closed
                    CurrentState = closedState;
                }

                private State CurrentState;
                
                public void SetState(BottleStateSetting newState)
                {
                    if (newState == BottleStateSetting.Closed)
                    {
                        CurrentState = closedState;
                    }
                    else 
                    {
                        CurrentState = openedState;
                    }
                }

                public void Pour()
                {
                    CurrentState.Pour();
                }   
            }

            public class Client
            {
                public static int Main(string[] args)
                {
                    ContextColaBottle contextColaBottle = new ContextColaBottle();

                    Console.WriteLine("initial state is closed");

                    Console.WriteLine("Now trying to pour");
                    contextColaBottle.Pour();

                    Console.WriteLine("Open bottle");
                    contextColaBottle.SetState(ContextColaBottle.BottleStateSetting.Opened);

                    Console.WriteLine("Try to pour again");
                    contextColaBottle.Pour();

                    return 0;
                }
            }
        }
        

Back
Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2010 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development