2021-09-16 17:55:28 +12:00

91 lines
1.7 KiB
C#

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