From e5a041da0dae1cdb350d8cd936610c773528da82 Mon Sep 17 00:00:00 2001 From: "Federico Pasqua (eisterman)" Date: Thu, 30 Oct 2025 15:24:03 +0100 Subject: [PATCH] Setting behaviour dynamically --- Ch1Duck/Duck.cs | 12 ++++++++++-- Ch1Duck/Fly.cs | 6 ++++++ Ch1Duck/Program.cs | 7 ++++++- 3 files changed, 22 insertions(+), 3 deletions(-) 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