namespace Ch1Duck; public abstract class Duck(IFlyBehaviour flyBehaviour, IQuackBehaviour quackBehaviour) { internal IFlyBehaviour FlyBehaviour { get; set; } = flyBehaviour; internal IQuackBehaviour QuackBehaviour { get; set; } = quackBehaviour; public abstract void Display(); public void PerformFly() { FlyBehaviour.Fly(); } public void PerformQuack() { QuackBehaviour.Quack(); } } public class MallardDuck() : Duck(new FlyWithWings(), new NormalQuack()) { public override void Display() { Console.WriteLine("I'm a real Mallard duck"); } } public class ModelDuck() : Duck(new FlyNoWay(), new NormalQuack()) { public override void Display() { Console.WriteLine("I'm a model duck"); } }