91 lines
1.7 KiB
C#
Raw Permalink Normal View History

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
}
}
}