module strategy.duck; import strategy.flybehavior; import strategy.quackbehavior; import std.stdio : writeln; abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; void display(); void performFly() { flyBehavior.fly(); } void performQuack() { quackBehavior.quack(); } void swim() { writeln("All ducks float, even decoys!"); } void setFlyBehavior(FlyBehavior fb) { flyBehavior = fb; } void setQuackBehavior(QuackBehavior qb) { quackBehavior = qb; } } class MallardDuck : Duck { this() { quackBehavior = new Quack; flyBehavior = new FlyWithWings; } override void display() { writeln("I'm a real Mallard duck"); } } class ModelDuck : Duck { this() { quackBehavior = new Squeak; flyBehavior = new FlyNoWay; } override void display() { writeln("I'm a model duck"); } }