// Decorator pattern void countTheDucks_Click(object sender, EventArgs e) { QuackCounter.ResetQuacks(); // An example of the decorator pattern List<IQuackable> ducksToCount = new List<IQuackable>(); IQuackable mallardDuck = new QuackCounter(new MallardDuck()); IQuackable rubberDuck = new QuackCounter(new RubberDuck()); IQuackable decoy = new DuckDecoy(); ducksToCount.Add(mallardDuck); ducksToCount.Add(rubberDuck); ducksToCount.Add(decoy); OutputData(ducksToCount); Console.WriteLine("Number of quacks: " + QuackCounter.GetNumberOfQuacks()); }
// Adapter pattern void quackTheDucks_Click(object sender, EventArgs e) { List<IQuackable> ducksToQuack = new List<IQuackable>(); // Let's create some ducks - shows the beauty of interfaces MallardDuck mallardDuck = new MallardDuck(); ducksToQuack.Add(mallardDuck); RubberDuck rubberDuck = new RubberDuck(); ducksToQuack.Add(rubberDuck); DuckDecoy duckDecoy = new DuckDecoy(); ducksToQuack.Add(duckDecoy); // Add a goose adapter to show the adapter pattern Goose goose = new Goose(); GooseToDuckAdapter gooseToDuckAdapter = new GooseToDuckAdapter(goose); ducksToQuack.Add(gooseToDuckAdapter); OutputData(ducksToQuack); }