예제 #1
0
            internal void Simnulate(AbstractDuckFactory duckFactory)
            {
                //1.使用工厂创建鸭子
                //2.使用装饰者,创建被装饰的鸭子
                IQuackable blueheadDuck = duckFactory.CreateBlueheadDuck();
                IQuackable pinkheadDuck = duckFactory.CreatePinkheadDuck();
                IQuackable duckCall     = duckFactory.CreateDuckCall();
                IQuackable rubberDuck   = duckFactory.CreateRubberDuck();
                //使用适配器模式创建一个会鹅叫的鸭子。
                IQuackable gooseDuck = new GooseAdapter(new Goose());

                IQuackable[] quacks = { blueheadDuck, pinkheadDuck, duckCall, rubberDuck, gooseDuck };
                //使用组合模式和迭代器模式
                Flock flockOfDucks = new Flock(quacks);

                Console.WriteLine("------鸭子模拟器-------");
                Simnulate(flockOfDucks);

                Console.WriteLine("------观察开始-------");
                //使用观察者模式
                IQuackableObservable provider  = new IQuackableObservable();
                IQuackableObserver   reporter1 = new IQuackableObserver();

                reporter1.Subscribe(provider);
                provider.Notify(duckFactory.CreateRubberDuck());
                Console.WriteLine("------观察结束-------");

                Console.WriteLine("鸭子叫的次数为:" + QuackCounter.NumberOfQuacks);
            }
예제 #2
0
        static void Main(string[] args)
        {
            AbstractDuckFactory _duckFactory  = new CountingDuckFactory();
            IQuackable          _mallardDuck  = _duckFactory.CreateMallarDuck();
            IQuackable          _readheadDuck = _duckFactory.CreateRedheadDuck();
            IQuackable          _duckCall     = _duckFactory.CreateDuckCall();
            IQuackable          _rubberDuck   = _duckFactory.CreateRubberDuck();
            IQuackable          _goose        = new GooseAdapter(new Goose());

            Console.WriteLine("\nDuck Simulator\n");

            //Стая уток
            DuckFlock _duckFlock = new DuckFlock();

            _duckFlock.Add(_readheadDuck);
            _duckFlock.Add(_rubberDuck);
            _duckFlock.Add(_duckCall);
            _duckFlock.Add(_goose);

            _mallardDuck.Quack();
            _readheadDuck.Quack();
            _duckCall.Quack();
            _rubberDuck.Quack();
            _goose.Quack();

            Console.WriteLine("\nThe ducks quacks " + QuackCounter.GetQuacks() + " times");

            //Вызов стаи
            _duckFlock.Quack();

            Console.ReadLine();
        }
예제 #3
0
    public void simulate(AbstractDuckFactory duckFactory)
    {
        Quackable mallardDuck  = duckFactory.createMallardDuck();
        Quackable redheadDuck  = duckFactory.createRedheadDuck();
        Quackable duckCall     = duckFactory.createDuckCall();
        Quackable rubberDuck   = duckFactory.createRubberDuck();
        Goose     goose        = new Goose();
        Quackable gooseAdapter = new GooseAdapter(goose);

        Flock flockOfDucks = new Flock();

        Quackologist quackologist = new Quackologist();

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

        //foarte important sa fie dupa ce am adaugat lez ducks ,
        //inregistrarea observerului se face cu interator pt toate lez ducks existente
        flockOfDucks.registerObserver(quackologist);

        Console.WriteLine("Duck Simulator");

        simulate(flockOfDucks);

        Console.WriteLine(" The ducks quacked " + QuackCounter.getQaucks() + " times");
    }
예제 #4
0
        public void Compound_Adapter_Behavior()
        {
            DuckSimulator duckSim      = new DuckSimulator();
            IQuackable    duck1        = new RubberDuck();
            Goose         goose        = new Goose();
            IQuackable    gooseAdapter = new GooseAdapter(goose);

            duckSim.Simulate(duck1);
            duckSim.Simulate(gooseAdapter);
        }
예제 #5
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();
        }
예제 #6
0
        static void Main(string[] args)
        {
            // Strategy pattern
            IQuackable mallardDuck = new MallardDuck();
            IQuackable redheadDuck = new RedheadDuck();
            IQuackable rubberDuck  = new RubberDuck();

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

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

            Console.ReadKey();
        }
        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");
        }
예제 #9
0
        static void Main(string[] args)
        {
            // Strategy pattern wrapped in Decorator pattern
            IQuackable mallardDuck = new QuackCounter(new MallardDuck());
            IQuackable redheadDuck = new QuackCounter(new RedheadDuck());
            IQuackable rubberDuck  = new QuackCounter(new RubberDuck());

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

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

            Console.WriteLine($"Number of duck quacks = {QuackCounter.GetQuackCount()}");
            Console.ReadKey();
        }
예제 #10
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());

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

            Console.WriteLine($"Number of duck quacks = {QuackCounter.GetQuackCount()}");
            Console.ReadKey();
        }
예제 #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");
        }
예제 #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");
        }