コード例 #1
0
        private void btnUndo_Click(object sender, RoutedEventArgs e) //Undo's a chance in the editor, gets called by clicking the undo button in the MainWinwdow
        {
            CareTaker c = careTaker;

            if (currentMemento >= 1)
            {
                currentMemento--;
                lilypondText.Text = originator.RestoreFromMemento(careTaker.Get(currentMemento));
                keyHandler.RestartThread();
            }


            reEvaluateButtons();
        }
コード例 #2
0
    public void Main()
    {
        Originator originator = new Originator();
        CareTaker  careTaker  = new CareTaker();


        originator.SetState("State #1");
        originator.SetState("State #2");
        careTaker.Add(originator.SaveStateToMemento());
        originator.SetState("State #3");
        careTaker.Add(originator.SaveStateToMemento());
        originator.SetState("State #4");

        Console.WriteLine("Current State: " + originator.GetState());
        originator.GetStateFromMemento(careTaker.Get(0));
        Console.WriteLine("First saved State: " + originator.GetState());
        originator.GetStateFromMemento(careTaker.Get(1));
        Console.WriteLine("Second saved State: " + originator.GetState());
    }
コード例 #3
0
        public void Start()
        {
            var originator = new Originator();
            var careTaker  = new CareTaker();

            originator.SetState("State #1");
            originator.SetState("State #2");
            careTaker.Add(originator.SaveStateToMemento());

            originator.SetState("State #3");
            careTaker.Add(originator.SaveStateToMemento());

            originator.SetState("State #4");
            logger.Info($"Current State: {originator.State}.");

            originator.GetStateFromMemento(careTaker.Get(0));
            logger.Info($"First Saved State: {originator.State}.");
            originator.GetStateFromMemento(careTaker.Get(1));
            logger.Info($"Second Saved State: {originator.State}.");
        }
コード例 #4
0
        static void Main(string[] args)
        {
            Originator originator = new Originator();
            CareTaker  careTaker  = new CareTaker();

            originator.State = "State #1";
            originator.State = "State #2";
            careTaker.Add(originator.saveStateToMemento());


            originator.State = "State #3";
            careTaker.Add(originator.saveStateToMemento());
            originator.State = "State #4";

            Console.WriteLine("Current State: " + originator.State);
            originator.GetStateFromMemento(careTaker.Get(0));
            Console.WriteLine("First saved State: " + originator.State);
            originator.GetStateFromMemento(careTaker.Get(1));
            Console.WriteLine("Second saved State: " + originator.State);
            Console.ReadKey();
        }
コード例 #5
0
        /*
         * Sem violar encapsulamento, captura e externaliza um
         * estado de objeto interno e entao este objeto pode ser restaurado
         * para um estado anterior
         *
         *  Quando usar:
         *   - um Snapshot de um objeto deve ser salvo para ser restaurado depois
         *   - uma interface direta para obter um estado iria expor detalhes
         *      da implementação e quebrar o encapsulamento
         */
        static void Main(string[] args)
        {
            Originator originator = new Originator();
            CareTaker  caretaker  = new CareTaker();

            originator.State = "#1";
            originator.State = "#2";
            caretaker.AddMement(originator.SaveState());

            originator.State = "#3";
            caretaker.AddMement(originator.SaveState());

            originator.State = "#4";
            Console.WriteLine("Actual State: " + originator.State);

            originator.GetStateFromMemento(caretaker.Get(1));
            Console.WriteLine("Actual State: " + originator.State);

            originator.GetStateFromMemento(caretaker.Get(0));
            Console.WriteLine("Actual State: " + originator.State);

            Console.ReadKey();
        }
コード例 #6
0
        static void Main(string[] args)
        {
            Stage[] stages = new[]
            {
                new Stage(Stage1),
                new Stage(Stage2),
                new Stage(Stage3),
                new Stage(Stage4),
                new Stage(Stage5),
            };


            Originator originator = new Originator();
            CareTaker  careTaker  = new CareTaker();

            originator.SetStage(0);

            while (true)
            {
                int curStage = originator.GetStage();

                if (curStage >= stages.Length)
                {
                    break;
                }

                Console.WriteLine("-------------当前关卡 " + (curStage + 1) + "-------------");

                careTaker.Add(originator.SaveStateToMemento());

                bool isStageWin = stages[curStage].RunStage(new Random().Next(1, 6));

                if (isStageWin)
                {
                    Console.WriteLine("恭喜获胜,即将进入下一关");
                    originator.SetStage(++curStage);
                }
                else
                {
                    Console.WriteLine("挑战失败,即将重新挑战");
                    curStage = careTaker.Get().GetStage();
                    originator.SetStage(curStage);
                }

                Console.WriteLine("------------------------------------");

                Thread.Sleep(1000);
            }
            Console.WriteLine("恭喜通过所有关卡");
        }
コード例 #7
0
        public void Test()
        {
            var careTaker  = new CareTaker <MyData>();
            var originator = new Originator <MyData>();

            originator.State = new MyData {
                Value = 2
            };
            careTaker.SaveState(originator.CreateMemento());

            originator.State = new MyData {
                Value = 6
            };
            careTaker.SaveState(originator.CreateMemento());
            Assert.Equal(6, originator.State.Value);

            originator.SetMemento(careTaker.Get(0));
            Assert.Equal(2, originator.State.Value);
        }
コード例 #8
0
ファイル: Player.cs プロジェクト: gGvidas/bomberman
 public void ReturnItem()
 {
     originator.GetStateFromMemento(careTaker.Get());
     item = originator.GetState();
 }
コード例 #9
0
        static void Main(string[] args)
        {
            /**
             * ITERATOR
             **/

            ConcreteAggregate collection = new ConcreteAggregate();

            Iterator.Iterator iterator = collection.createIterator();

            //use to iterator to go through the collection
            while (!iterator.isDone())
            {
                Console.WriteLine(iterator.Next().ToString());
            }

            /**
             * OBSERVER
             **/

            Subject subject = new ConcreteSubject(SubjectState.Red);

            subject.Attach(new ConcreteObserver());
            subject.Attach(new ConcreteObserver());
            subject.Attach(new ConcreteObserver());

            ((ConcreteSubject)subject).SubjectState = SubjectState.Blue;

            /**
             * DECORATOR
             **/

            //we create a class with a base function
            Component component = new ConcreteComponent();

            //we create the function we want the add to the first class
            Decorator.Decorator decorator = new ConcreteDecorator();

            //the decorator gets the functionality of the class we want to extend
            decorator.SetBaseFuntionality(component);

            //both ops are called
            decorator.Operation();

            /**
             * COMMAND
             **/

            Command.Command command = new ConcreteCommand(new Receiver());

            //create an invoker which in turn calls the command which IN TURN calls the receiver
            Invoker invoker = new Invoker();

            invoker.SetCommand(command);
            invoker.ExecuteCommand();

            /**
             * COMPOSITE
             **/

            //instanciate differents persons
            Composite.Component component1 = new Composite.Composite("Bob");
            Composite.Component component2 = new Composite.Composite("Patrick");
            Composite.Component component3 = new Composite.Composite("Johny");
            Composite.Component component4 = new Composite.Composite("Pierre");

            //affects differents persons to a superior
            component1.Add(component2);
            component2.Add(component3);
            component2.Add(component4);

            //default method for every objects in the tree
            component1.Operation();

            /**
             * MEMENTO
             **/

            Originator originator = new Originator();
            CareTaker  careTaker  = new CareTaker();

            //create a couple of states
            originator.State = "state1";
            originator.State = "state2";
            //save at some point
            careTaker.Add(originator.SaveToMemento());
            originator.State = "state3";

            //restore state at the time of the save
            originator.RestoreStateFromMemento(careTaker.Get(0));

            Console.WriteLine(originator.State);

            Console.ReadKey();
        }
コード例 #10
0
 public SavedState GetState()
 {
     m_originator.RestoreToMemento(m_carTaker.Get(1));
     return(m_originator.GetState());
 }
コード例 #11
0
        // Singleton    done
        // Factory      done
        // Strategy     done
        // Observer     done

        // Adapter      done
        // Decorator    done
        // Facade       done
        // Command      done

        // Template Method - zaidimo temos
        // State - zaidimo busena
        // Proxy -
        // Iterator, Composite, Flyweight

        // Chain of Responsibility
        // Null Object - score null
        // Memento - restart/resume game
        // Visitor - when enemies die, they visit visitor
        // Interpreter - custom game mod



        public Form1()
        {
            InitializeComponent();
            instance = this;

            //Singleton and Adapter
            logger.LogMessage("Adapter Works!");
            guiLogger.LogMessage("Gui Logger Works!");

            pacman = new Classes.Pacman(false);
            MoveDown  moveDown  = new MoveDown(pacman);
            MoveUp    moveUp    = new MoveUp(pacman);
            MoveLeft  moveLeft  = new MoveLeft(pacman);
            MoveRight moveRight = new MoveRight(pacman);

            //Command
            pacman.Move(moveDown);
            pacman.Move(moveUp);
            pacman.Move(moveLeft);
            pacman.Move(moveRight);

            //Strategy
            Enemy enemy = new Enemy(new AiAmbusher());

            enemy.SelectStrategy();
            enemy.strategy = new AiRandom();
            enemy.SelectStrategy();

            //Observer
            pacman.Attach(enemy);
            pacman.State = true;

            //Abstract factory
            AbstractFactory candyFactory = new CandyFactory();
            ICandy          candy1       = candyFactory.GetCandy("small");

            candy1.CreateCandy();

            ICandy candy2 = candyFactory.GetCandy("big");

            candy2.CreateCandy();

            ICandy candy3 = candyFactory.GetCandy("cherry");

            candy3.CreateCandy();

            ICandy candy4 = candyFactory.GetCandy("BANANA");

            candy4.CreateCandy();

            AbstractFactory colorFactory = new ColorFactory();
            IColor          color1       = colorFactory.GetColor("yellow");

            color1.CreateColor();

            IColor color2 = colorFactory.GetColor("red");

            color2.CreateColor();

            //Facade
            FoodFacade food = new FoodFacade();

            food.CreateRedCherry();
            food.CreateRedSmall();
            food.CreateYellowBanana();
            food.CreateYellowBig();

            //Decorator with Template Method
            pacman.weapon = new Gun();
            Debug.WriteLine(pacman.weapon.Shoot());
            pacman.weapon = new Cannon(pacman.weapon);
            Debug.WriteLine(pacman.weapon.Shoot());
            pacman.weapon = new SpeedTrap(pacman.weapon);
            Debug.WriteLine(pacman.weapon.Shoot());

            // State
            // Changes game state from resumed to paused and vice versa
            StateContext stateContext = new StateContext();
            StateResumed stateResumed = new StateResumed();
            StatePaused  statePaused  = new StatePaused();

            stateResumed.Handle(stateContext);
            Console.WriteLine(stateContext.GetState().GetString());
            statePaused.Handle(stateContext);
            Console.WriteLine(stateContext.GetState().GetString());

            // Proxy
            // Loads background image for gameboard
            IBackgroundImage image = new ProxyBackgroundImage("Background1.jpg");

            image.Display();
            Console.WriteLine("");
            // Image will not be loaded from disk again
            image.Display();

            // Flyweight
            // Pattern used to generate obstacles based on their length

            for (int i = 0; i < 8; i++)
            {
                //Creating duplicate objects
                Obstacle obs = ObstacleFactory.GetObstacle(i < 4 ? i : i / 2);
                obs.SetX(4);
                obs.SetY(4);
                obs.SetRotation(0);
                obs.Draw();
            }

            // Chain of responsibility
            // For handling scores
            AllScoresHandler handler1 = new NullObject();
            AllScoresHandler handler2 = new BonusHandler();
            AllScoresHandler handler3 = new PointsHandler();

            handler1.SetNextHandler(handler2);
            handler2.SetNextHandler(handler3);
            int[] points = { 0, 15, 5, 10, -5, 16, 18, 0, 0, 13, 1, 2, 3 };
            foreach (int point in points)
            {
                handler1.HandleScore(point);
            }
            Console.WriteLine("Final points: " + Highscore.Instance.score);

            // Mediator
            // Implemented chatroom
            Chatroom chatroom = new Chatroom();

            Participant player     = new Participant("Player");
            Participant spectator1 = new Participant("Spectator1");
            Participant spectator2 = new Participant("Spectator2");

            chatroom.Register(player);
            chatroom.Register(spectator1);
            chatroom.Register(spectator2);

            player.Send("Spectator1", "Hello, spectator!");
            spectator1.Send("Player", "Hello, player!");
            spectator2.Send("Player", "Hey, don't forget me!");

            // Memento
            // Saving player score for later use
            CareTaker careTaker = new CareTaker();

            careTaker.Add(Highscore.Instance.SetMemento());
            Console.WriteLine("Memento saved state: " + careTaker.Get(0).GetScore());
            Highscore.Instance.score = 2222;
            careTaker.Add(Highscore.Instance.SetMemento());
            Console.WriteLine("Memento saved state: " + careTaker.Get(1).GetScore());
            Console.WriteLine("Restoring to first memento.");
            Highscore.Instance.SetMemento(careTaker.Get(0));
            Console.WriteLine("Restored score is: " + Highscore.Instance.score);

            // Interpreter
            // Eating yellow banana will binary shift your score to the left and add 10 points to the result
            Console.WriteLine("Score before interpreter: " + Highscore.Instance.score);
            Counter originalCounter = new ConcreteCounter(Highscore.Instance.score);
            Counter bananaCounter   = new ConcreteCounter(10);
            Counter counter         = new ShiftCounter(bananaCounter, originalCounter);

            Highscore.Instance.score = counter.Count();
            Console.WriteLine("Score before interpreter: " + Highscore.Instance.score);
        }