diff --git a/Ch1Duck/Duck.cs b/Ch1Duck/Duck.cs index 42bf97b..189c47e 100644 --- a/Ch1Duck/Duck.cs +++ b/Ch1Duck/Duck.cs @@ -1,14 +1,16 @@ 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(); + FlyBehaviour.Fly(); } public void PerformQuack() { - quackBehaviour.Quack(); + QuackBehaviour.Quack(); } } @@ -16,4 +18,10 @@ 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"); + } } \ No newline at end of file diff --git a/Ch1Duck/Fly.cs b/Ch1Duck/Fly.cs index a71f2f6..cd9ebc6 100644 --- a/Ch1Duck/Fly.cs +++ b/Ch1Duck/Fly.cs @@ -14,4 +14,10 @@ public class FlyNoWay: IFlyBehaviour { public void Fly() { Console.WriteLine("I can't fly"); } +} + +public class FlyRocketPowered: IFlyBehaviour { + public void Fly() { + Console.WriteLine("I'm flying with a rocket!"); + } } \ No newline at end of file diff --git a/Ch1Duck/Program.cs b/Ch1Duck/Program.cs index ee9687f..66b69d4 100644 --- a/Ch1Duck/Program.cs +++ b/Ch1Duck/Program.cs @@ -4,4 +4,9 @@ using Ch1Duck; Duck mallard = new MallardDuck(); mallard.PerformQuack(); -mallard.PerformFly(); \ No newline at end of file +mallard.PerformFly(); + +Duck model = new ModelDuck(); +model.PerformFly(); +model.FlyBehaviour = new FlyRocketPowered(); +model.PerformFly(); \ No newline at end of file