Setting behaviour dynamically
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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!");
|
||||
}
|
||||
}
|
||||
@@ -4,4 +4,9 @@ using Ch1Duck;
|
||||
|
||||
Duck mallard = new MallardDuck();
|
||||
mallard.PerformQuack();
|
||||
mallard.PerformFly();
|
||||
mallard.PerformFly();
|
||||
|
||||
Duck model = new ModelDuck();
|
||||
model.PerformFly();
|
||||
model.FlyBehaviour = new FlyRocketPowered();
|
||||
model.PerformFly();
|
||||
Reference in New Issue
Block a user