2021-09-14 12:31:36 +12:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace DuckModel
|
|
|
|
|
{
|
|
|
|
|
public interface IFlyBehaviour
|
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
string Fly();
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public interface IQuackBehaviour
|
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
string Quack();
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
public abstract class DuckBehaviour
|
|
|
|
|
{
|
|
|
|
|
IFlyBehaviour _flyBehaviour;
|
|
|
|
|
IQuackBehaviour _quackBehaviour;
|
|
|
|
|
|
|
|
|
|
public void Swim()
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("The duck swims");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public abstract void Display();
|
|
|
|
|
|
2021-09-16 17:55:28 +12:00
|
|
|
|
public string PerformQuack()
|
2021-09-14 12:31:36 +12:00
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
return _quackBehaviour.Quack();
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
|
2021-09-16 17:55:28 +12:00
|
|
|
|
public string PerformFly()
|
2021-09-14 12:31:36 +12:00
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
return _flyBehaviour.Fly();
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void SetFlyBehaviour(IFlyBehaviour flyBehaviour)
|
|
|
|
|
{
|
|
|
|
|
_flyBehaviour = flyBehaviour;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void SetQuackBehaviour(IQuackBehaviour newBehaviour)
|
|
|
|
|
{
|
|
|
|
|
_quackBehaviour = newBehaviour;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Quack : IQuackBehaviour
|
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
string IQuackBehaviour.Quack()
|
2021-09-14 12:31:36 +12:00
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
return "The duck quacks";
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Squeak : IQuackBehaviour
|
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
string IQuackBehaviour.Quack()
|
2021-09-14 12:31:36 +12:00
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
return "The duck squeaks";
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class MuteQuack : IQuackBehaviour
|
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
string IQuackBehaviour.Quack()
|
2021-09-14 12:31:36 +12:00
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
return "The duck makes no sound";
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class FlyWithWings : IFlyBehaviour
|
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
public string Fly()
|
2021-09-14 12:31:36 +12:00
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
return "I can fly with my wings";
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class NoFly : IFlyBehaviour
|
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
public string Fly()
|
2021-09-14 12:31:36 +12:00
|
|
|
|
{
|
2021-09-16 17:55:28 +12:00
|
|
|
|
return "I cannot fly";
|
2021-09-14 12:31:36 +12:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|