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); }
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); }
void Simulate(IQuackableObservable duck) { duck.Quack(); }
public QuackCounter(IQuackableObservable duck) { this.duck = duck; observable = new Observable(this); }
public void Update(IQuackableObservable observable) { Console.WriteLine($" {observable} quacked."); }
public Observable(IQuackableObservable observable) { _observable = observable; }
public void Add(IQuackableObservable quacker) { quackers.Add(quacker); }