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); }
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()); }
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); }
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); }
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"); }
public void Simulate(AbstractDuckFactory duckFactory, AbstractGooseAdapterFactory gooseAdapterFactory) { var redheadDuck = duckFactory.CreateRedheadDuck(); var duckCall = duckFactory.CreateDuckCall(); var rubberDuck = duckFactory.CreateRubberDuck(); var goose = gooseAdapterFactory.CreateGooseAdapter(); var ducksFlock = new DuckFlock(); ducksFlock.Add(redheadDuck); ducksFlock.Add(duckCall); ducksFlock.Add(rubberDuck); ducksFlock.Add(goose); var mallardDuck1 = duckFactory.CreateMallardDuck(); var mallardDuck2 = duckFactory.CreateMallardDuck(); var mallardDuck3 = duckFactory.CreateMallardDuck(); var mallardDuck4 = duckFactory.CreateMallardDuck(); var mallardDucksFlock = new DuckFlock(); mallardDucksFlock.Add(mallardDuck1); mallardDucksFlock.Add(mallardDuck2); mallardDucksFlock.Add(mallardDuck3); mallardDucksFlock.Add(mallardDuck4); ducksFlock.Add(mallardDucksFlock); Console.WriteLine("\n--- Duck simulator ---\n"); // Console.WriteLine("\n---- Duck simulator: Whole Flock simulation\n"); // Simulate(ducksFlock); // // Console.WriteLine("\n---- Duck simulator: Whole Flock simulation\n"); // Simulate(mallardDucksFlock); // Console.WriteLine($"The ducks quacked {QuackCounterDecorator.AllQuacksCount} times"); Console.WriteLine("\n---- Duck simulator: with observer\n"); var quackologist = new Quackologist(); ducksFlock.RegisterObserver(quackologist); Simulate(ducksFlock); Console.WriteLine($"The ducks quacked {QuackCounterDecorator.AllQuacksCount} times"); }
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("Duck Simulator: With Composite - Flocks"); //Создаем объект Flock и заполняем его реализациями IQuackable Flock flockOfDucks = new Flock(); flockOfDucks.Add(redheadDuck); flockOfDucks.Add(duckCall); flockOfDucks.Add(rubberDuck); flockOfDucks.Add(gooseDuck); // Затем создаем новый объект Flock, предназначенный только для крякв (MallardDuck) 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("\nThe ducks quacked " + QuackCounter.GetQuacks() + " times"); }
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"); }
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"); }
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"); }