public void Init()
        {
            duckFactory = new CountingDuckFactory();

            //QuackCounter is Decorator Pattern
            mallardDuck = duckFactory.CreateMallardDuck();
            redheadDuck = duckFactory.CreateRedheadDuck();
            duckCall    = duckFactory.CreateDuckCall();
            rubberDuck  = duckFactory.CreateRubberDuck();
            gooseDuck   = new GooseAdapter(new Goose());          //Adapter Pattern

            //Flock is Iterator Pattern
            flockOfDucks = new Flock();

            flockOfDucks.Add(redheadDuck);
            flockOfDucks.Add(duckCall);
            flockOfDucks.Add(rubberDuck);
            flockOfDucks.Add(gooseDuck);

            flockOfMallards = new Flock();

            mallardOne   = duckFactory.CreateMallardDuck();
            mallardTwo   = duckFactory.CreateMallardDuck();
            mallardThree = duckFactory.CreateMallardDuck();
            mallardFour  = duckFactory.CreateMallardDuck();

            flockOfMallards.Add(mallardOne);
            flockOfMallards.Add(mallardTwo);
            flockOfMallards.Add(mallardThree);
            flockOfMallards.Add(mallardFour);

            flockOfDucks.Add(flockOfMallards);
        }
Exemple #2
0
        static void Main(string[] args)
        {
            // Abstract Factory
            AbstractDuckFactory duckFactory = new CountingDuckQuackFactory();

            // Abstract factory to create Strategy pattern wrapped in Decorator pattern
            IQuackable mallardDuck = duckFactory.CreateMallardDuck();
            IQuackable redheadDuck = duckFactory.CreateRedheadDuck();
            IQuackable rubberDuck  = duckFactory.CreateRubberDuck();

            // Adapter pattern
            IQuackable goose = new GooseAdapter(new Goose());

            // Composite pattern
            Flock flockOfDucks = new Flock();

            flockOfDucks.Add(mallardDuck);
            flockOfDucks.Add(redheadDuck);
            flockOfDucks.Add(rubberDuck);

            Flock flockOfMallards = new Flock();

            flockOfMallards.Add(duckFactory.CreateMallardDuck());
            flockOfMallards.Add(duckFactory.CreateMallardDuck());
            flockOfMallards.Add(duckFactory.CreateMallardDuck());
            flockOfMallards.Add(duckFactory.CreateMallardDuck());
            flockOfMallards.Add(duckFactory.CreateMallardDuck());

            duckCall(mallardDuck);
            duckCall(redheadDuck);
            duckCall(rubberDuck);
            duckCall(goose);

            // Flock of Mallards
            Console.WriteLine("\nA flock of Mallards quacking ...");
            flockOfMallards.Quack();

            // Flock of mixed ducks
            Console.WriteLine("\nA flock of mixed ducks quacking ...");
            flockOfDucks.Quack();

            // Altogether now
            Console.WriteLine("\nEntire flock quacking ...");
            flockOfDucks.Add(flockOfMallards);
            flockOfDucks.Quack();

            Console.WriteLine($"Number of duck quacks = {QuackCounter.GetQuackCount()}");
            Console.ReadKey();
        }
        public void Simulate(AbstractDuckFactory factory)
        {
            var flockOfDucks = new Flock();

            flockOfDucks.Add(factory.CreateMallardDuck());
            flockOfDucks.Add(factory.CreateRedheadDuck());
            flockOfDucks.Add(factory.CreateDuckCall());
            flockOfDucks.Add(factory.CreateRubberDuck());
            flockOfDucks.Add(new QuackCounter(new GooseAdapter(new Goose())));

            var flockOfMallards = new Flock();

            for (int i = 0; i < 4; i++)
            {
                flockOfMallards.Add(factory.CreateMallardDuck());
            }

            flockOfDucks.Add(flockOfMallards);

            "Duck Simulator with Observer\n--------------------------------".P();
            var quackologist = new Quackologist();

            flockOfDucks.RegisterObserver(quackologist);
            flockOfDucks.Quack();
            "Mallard Simulator\n--------------------------------".P();
            flockOfMallards.Quack();
            "--------------------------------\nThe ducks quacked {0} times".P(QuackCounter.GetQuacks());
        }
Exemple #4
0
        private void Simulate(AbstractDuckFactory duckFactory)
        {
            Flock flockOfDucks = new Flock
            {
                duckFactory.CreateRedheadDuck(),
                  duckFactory.CreateDuckCall(),
                  duckFactory.CreateRubberDuck(),
                new GooseAdapter(new Geese.Goose())
            };

            Flock flockOfMallards = new Flock
            {
                duckFactory.CreateMallardDuck(),
                  duckFactory.CreateMallardDuck(),
                  duckFactory.CreateMallardDuck(),
                  duckFactory.CreateMallardDuck(),
            };

            Console.WriteLine("\nDuck Simulator: With Observer");
            Quackologist quackologist = new Quackologist();

            flockOfDucks.Subscribe(quackologist);

            flockOfDucks.Add(flockOfMallards);

            Console.WriteLine("\nDuck Simulator: Whole Flock Simulator");
            Simulate(flockOfDucks);

            Console.WriteLine("\nDuck Simulator: Mallard Flock Simulator");
            Simulate(flockOfMallards);

            Console.WriteLine("\nThe ducks quacked {0} times", QuackCounter.Count);
        }
Exemple #5
0
        public void Compound_Observer()
        {
            DuckSimulator sim         = new DuckSimulator();
            Flock         flockDucks  = new Flock();
            IDuckFactory  duckFactory = new DuckCounterFactory();

            flockDucks.Add(duckFactory.CreateMallardDuck());
            flockDucks.Add(duckFactory.CreateRubberDuck());
            flockDucks.Add(duckFactory.CreateRedheadDuck());
            flockDucks.Add(duckFactory.CreateDuckCall());
            flockDucks.Add(new GooseAdapter(new Goose()));

            flockDucks.RegisterObservers(new QuackologistObserver());

            sim.Simulate(flockDucks);
            Assert.AreEqual(4, QuackCounter.GetQuackCount());
        }
Exemple #6
0
        void Simulate(AbstractDuckFactory duckFactory)
        {
            Quackable mallardDuck = duckFactory.CreateMallardDuck();
            Quackable redHeadDuck = duckFactory.CreateRedHeadDuck();
            Quackable duckCall = duckFactory.CreateDuckCall();
            Quackable rubberDuck = duckFactory.CreateRubberDuck();
            Quackable gooseAdapter = duckFactory.CreateGeese();// new GeeseAdapter(new Geese());

            Flock duckFlock = new Flock();
            duckFlock.Add(mallardDuck);
            duckFlock.Add(redHeadDuck);
            duckFlock.Add(duckCall);
            duckFlock.Add(rubberDuck);
            duckFlock.Add(gooseAdapter);

            Flock mallardFlock = new Flock();
            mallardFlock.Add(duckFactory.CreateMallardDuck());
            mallardFlock.Add(duckFactory.CreateMallardDuck());
            mallardFlock.Add(duckFactory.CreateMallardDuck());
            mallardFlock.Add(duckFactory.CreateMallardDuck());

            //again add the mallard to duck flock
            duckFlock.Add(mallardFlock);

            //Quackalogist qmallard = new Quackalogist();
            //MallardDuck malldck = new MallardDuck();
            //malldck.RegisterObservable(qmallard);
            //Simulate(malldck);

            //Quackalogist quackalogist = new Quackalogist();
            //Quackable mallardDuckDec = new QuackCounter(new MallardDuck());
            //mallardDuckDec.RegisterObservable(quackalogist);
            //Simulate(mallardDuckDec);

            Quackalogist quackalogistFlock = new Quackalogist();
            duckFlock.RegisterObservable(quackalogistFlock);

            Console.WriteLine("\nPrinting duckflock+ mallardflock");
            Simulate(duckFlock);

            Console.WriteLine("\nPrinting mallardflock");
            //mallardFlock.RegisterObservable(quackalogistFlock);
            Simulate(mallardFlock);

            Console.WriteLine(QuackCounter.GetQuackCounter());
        }
        public void Simulate(AbstractDuckFactory duckFactory)
        {
            IQuackable mallardDuck = duckFactory.CreateMallardDuck();
            IQuackable redheadDuck = duckFactory.CreateRedheadDuck();
            IQuackable duckCall    = duckFactory.CreateDuckCall();
            IQuackable rubberDuck  = duckFactory.CreateRubberDuck();
            IQuackable gooseDuck   = new GooseAdapter(new Goose());

            Console.WriteLine("\nDuck Simulator: With Abstract Factory, Composite - Flocks");

            Flock flockOfDucks = new Flock();

            flockOfDucks.Add(redheadDuck);
            flockOfDucks.Add(duckCall);
            flockOfDucks.Add(rubberDuck);
            flockOfDucks.Add(gooseDuck);

            Flock flockOfMallards = new Flock();

            IQuackable mallardOne   = duckFactory.CreateMallardDuck();
            IQuackable mallardTwo   = duckFactory.CreateMallardDuck();
            IQuackable mallardThree = duckFactory.CreateMallardDuck();
            IQuackable mallardFour  = duckFactory.CreateMallardDuck();

            flockOfMallards.Add(mallardOne);
            flockOfMallards.Add(mallardTwo);
            flockOfMallards.Add(mallardThree);
            flockOfMallards.Add(mallardFour);

            flockOfDucks.Add(flockOfMallards);

            Console.WriteLine("\nDuck Simulator: Whole Flock Simulation");
            Simulate(flockOfDucks);

            Console.WriteLine("\nDuck Simulator: Mallard Flock Simulation");
            Simulate(flockOfMallards);

            Console.WriteLine("\nDuck Simulator: With Observer");
            Quackologist quackologist = new Quackologist();

            flockOfDucks.RegisterObserver(quackologist);
            Simulate(flockOfDucks);

            Console.WriteLine("The ducks quacked " + QuackCounter.NumberOfQuacks + " times.");
        }
        private static void Simulate(AbstractDuckFactory duckFactory, AbstractGooseFactory gooseFactory)
        {
            IQuackable mallardDuck  = duckFactory.CreateMallardDuck();
            IQuackable readheadDuck = duckFactory.CreateReadheadDuck();
            IQuackable duckCall     = duckFactory.CreateDuckCall();
            IQuackable rubberDuck   = duckFactory.CreateRubberDuck();
            IQuackable gooseDuck    = new GooseAdapter(gooseFactory.CreateGoose());

            Console.WriteLine("\nDuck Simulator: With Composite - Flocks");

            var flockOfDucks = new Flock();

            flockOfDucks.Add(mallardDuck);
            flockOfDucks.Add(readheadDuck);
            flockOfDucks.Add(duckCall);
            flockOfDucks.Add(rubberDuck);
            flockOfDucks.Add(gooseDuck);

            var flockOfMallards = new Flock();

            IQuackable mallard_1 = duckFactory.CreateMallardDuck();
            IQuackable mallard_2 = duckFactory.CreateMallardDuck();
            IQuackable mallard_3 = duckFactory.CreateMallardDuck();
            IQuackable mallard_4 = duckFactory.CreateMallardDuck();

            flockOfMallards.Add(mallard_1);
            flockOfMallards.Add(mallard_2);
            flockOfMallards.Add(mallard_3);
            flockOfMallards.Add(mallard_4);

            flockOfDucks.Add(flockOfMallards);

            Console.WriteLine("\nDuck Simulator: With Observer");
            var quackologist = new Quackologist();

            flockOfDucks.RegisterObserver(quackologist);

            Console.WriteLine("\nDuck Simulator: Whole Flock Simulation");
            Simulate(flockOfDucks);

            Console.WriteLine("\nDuck Simulator: Mallard Flock Simulation");
            Simulate(flockOfMallards);

            Console.WriteLine($"The ducks quacked {QuackCounter.GetQuacks()} times");
        }
Exemple #9
0
        private static void generateDucksAndRunSimulation(AbstractDuckFactory abstractDuckFactory, AbstractGooseFactory abstractGooseFactory)
        {
            IQuackable redheadDuck = abstractDuckFactory.CreateRedheadDuck();
            IQuackable duckCall    = abstractDuckFactory.CreateDuckCall();
            IQuackable rubberDuck  = abstractDuckFactory.CreateRubberDuck();

            IQuackable gooseDuck = abstractGooseFactory.CreateGoose();

            Flock flockOfDucks = new Flock();

            flockOfDucks.Add(redheadDuck);
            flockOfDucks.Add(duckCall);
            flockOfDucks.Add(rubberDuck);
            flockOfDucks.Add(gooseDuck);

            Flock flockOfMallards = new Flock();

            // Create a little family of mallards here
            IQuackable mallardDuck1 = abstractDuckFactory.CreateMallardDuck();
            IQuackable mallardDuck2 = abstractDuckFactory.CreateMallardDuck();
            IQuackable mallardDuck3 = abstractDuckFactory.CreateMallardDuck();
            IQuackable mallardDuck4 = abstractDuckFactory.CreateMallardDuck();

            flockOfMallards.Add(mallardDuck1);
            flockOfMallards.Add(mallardDuck2);
            flockOfMallards.Add(mallardDuck3);
            flockOfMallards.Add(mallardDuck4);

            // Also add the flock of mallards to the flock of ducks - They are ducks in the end too!
            flockOfDucks.Add(flockOfMallards);

            Console.WriteLine("\nDuck Simulator: Whole Flock Simulation with observer");
            IObserver quackologist = new Quackologist();

            flockOfDucks.RegisterObserver(quackologist);
            simulate(flockOfDucks);

            Console.WriteLine("\nDuck Simulator: Mallard Flock Simulation");
            simulate(flockOfMallards);

            Console.WriteLine("The ducks quacked " + QuackCounterDecorator.GetNumberOfQuacks() + " times");
        }
Exemple #10
0
        public void Compound_Composite()
        {
            DuckSimulator sim = new DuckSimulator();

            Flock        flockDucks  = new Flock();
            IDuckFactory duckFactory = new DuckFactory();

            flockDucks.Add(duckFactory.CreateMallardDuck());
            flockDucks.Add(duckFactory.CreateMallardDuck());
            flockDucks.Add(duckFactory.CreateMallardDuck());
            flockDucks.Add(duckFactory.CreateMallardDuck());
            Flock flockRubberDucks = new Flock();

            flockRubberDucks.Add(duckFactory.CreateRubberDuck());
            flockRubberDucks.Add(duckFactory.CreateRubberDuck());
            flockRubberDucks.Add(duckFactory.CreateRubberDuck());
            flockDucks.Add(flockRubberDucks);

            sim.Simulate(flockDucks);
        }
Exemple #11
0
        public void Simulate()
        {
            IQuackableObservable mallardDuck = factory.CreateMallardDuck();
            IQuackableObservable redheadDuck = factory.CreateRubberDuck();
            IQuackableObservable duckCall    = factory.CreateDuckCall();
            IQuackableObservable rubberDuck  = factory.CreateRubberDuck();
            IQuackableObservable gooseDuck   = new GooseAdapter(new Goose());


            Flock flockOfDucks = new Flock();

            flockOfDucks.Add(mallardDuck);
            flockOfDucks.Add(redheadDuck);
            flockOfDucks.Add(duckCall);
            flockOfDucks.Add(rubberDuck);

            Quackologist q = new Quackologist();

            flockOfDucks.RegisterObserver(q);
            mallardDuck.RegisterObserver(q);



            Console.WriteLine("-----Whole Ducks quack-----\n");

            Simulate(flockOfDucks);



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

            Simulate(mallardDuck);
            Simulate(redheadDuck);
            Simulate(duckCall);
            Simulate(rubberDuck);
            Simulate(gooseDuck);

            Console.WriteLine("Quacks Count:" + QuackCounter.quackCount);
        }
        private void Simulate(AbstractDuckFactory duckFactory)
        {
            IQuackable redheadDuck = duckFactory.CreateRedheadDuck();
            IQuackable duckCall    = duckFactory.CreateDuckCall();
            IQuackable rubberDuck  = duckFactory.CreateRubberDuck();
            IQuackable gooseDuck   = new GooseAdapter(new Goose());

            Flock flockOfDucks = new Flock();

            flockOfDucks.Add(redheadDuck);
            flockOfDucks.Add(duckCall);
            flockOfDucks.Add(rubberDuck);
            flockOfDucks.Add(gooseDuck);

            Flock flockOfMallards = new Flock();

            IQuackable mallardOne   = duckFactory.CreateMallardDuck();
            IQuackable mallardTwo   = duckFactory.CreateMallardDuck();
            IQuackable mallardThree = duckFactory.CreateMallardDuck();
            IQuackable mallardFour  = duckFactory.CreateMallardDuck();

            flockOfMallards.Add(mallardOne);
            flockOfMallards.Add(mallardTwo);
            flockOfMallards.Add(mallardThree);
            flockOfMallards.Add(mallardFour);

            flockOfDucks.Add(flockOfMallards);

            Console.WriteLine($"{System.Environment.NewLine}Duck Simulator: With Observer");

            Quackologist quackologist = new Quackologist();

            flockOfDucks.RegisterObserver(quackologist);

            Simulate(flockOfDucks);

            Console.WriteLine($"{System.Environment.NewLine}The ducks quacked {QuackCounter.NumberOfQuacks} times");
        }
Exemple #13
0
        private void simulate(AbstractDuckFactory duckFactory)
        {
            IQuack redheadDuck = duckFactory.CreateRedheadDuck();
            IQuack duckCall    = duckFactory.CreateDuckCall();
            IQuack rubberDuck  = duckFactory.CreatRubberDuck();
            IQuack gooseDuck   = new GooseAdapter(new Goose());

            Flock flockOfDucks = new Flock();

            flockOfDucks.Add(redheadDuck);
            flockOfDucks.Add(duckCall);
            flockOfDucks.Add(rubberDuck);
            flockOfDucks.Add(gooseDuck);

            Flock flockOfMallards = new Flock();

            IQuack mallardOne   = duckFactory.CreateMallardDuck();
            IQuack mallardTwo   = duckFactory.CreateMallardDuck();
            IQuack mallardThree = duckFactory.CreateMallardDuck();
            IQuack mallardFour  = duckFactory.CreateMallardDuck();

            flockOfMallards.Add(mallardOne);
            flockOfMallards.Add(mallardTwo);
            flockOfMallards.Add(mallardThree);
            flockOfMallards.Add(mallardFour);

            flockOfDucks.Add(flockOfMallards);

            Console.WriteLine("\r\nDuck Simulator: With Observer");
            Quacklogist quacklogist = new Quacklogist();

            flockOfDucks.RegisterObserver(quacklogist);

            simulate(flockOfDucks);

            Console.WriteLine("The ducks quacked " + QuackCounter.GetQuacks + " times");
        }
Exemple #14
0
    public void ParseContext(List <Transform> context)
    {
        List <Transform> friendlies = context.Where(item => item.parent.gameObject == transform.parent.gameObject).ToList();
        List <Transform> enemies    = context.Where(item => item.parent.gameObject != transform.parent.gameObject).ToList();

        if (friendlies.Count < enemies.Count)
        {
            time += Time.deltaTime;
        }
        else
        {
            time = 0;
        }

        if (time > 1)
        {
            Flock enemyFlock = enemies.First().GetComponentInParent <Flock>();
            gameObject.SetActive(false);
            enemyFlock.Add(transform);
            deleted = true;
        }
    }