Setting behaviour dynamically
This commit is contained in:
@@ -1,14 +1,16 @@
|
|||||||
namespace Ch1Duck;
|
namespace Ch1Duck;
|
||||||
|
|
||||||
public abstract class Duck(IFlyBehaviour flyBehaviour, IQuackBehaviour quackBehaviour) {
|
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 abstract void Display();
|
||||||
|
|
||||||
public void PerformFly() {
|
public void PerformFly() {
|
||||||
flyBehaviour.Fly();
|
FlyBehaviour.Fly();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PerformQuack() {
|
public void PerformQuack() {
|
||||||
quackBehaviour.Quack();
|
QuackBehaviour.Quack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16,4 +18,10 @@ public class MallardDuck() : Duck(new FlyWithWings(), new NormalQuack()) {
|
|||||||
public override void Display() {
|
public override void Display() {
|
||||||
Console.WriteLine("I'm a real Mallard duck");
|
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() {
|
public void Fly() {
|
||||||
Console.WriteLine("I can't 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();
|
Duck mallard = new MallardDuck();
|
||||||
mallard.PerformQuack();
|
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