0% found this document useful (0 votes)
37 views4 pages

It

Uploaded by

MENSTAR
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
37 views4 pages

It

Uploaded by

MENSTAR
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

using System;

using System.Collections.Generic;

public interface IFlyable


{
void Fly();
}

public class NoFly : IFlyable


{
public void Fly()
{
Console.WriteLine("---");
}
}

public class FlyWithWings : IFlyable


{
public void Fly()
{
Console.WriteLine("I'm flying with my wings");
}
}

public interface IQuackable


{
void Quack();
}

public class NoQuack : IQuackable


{
public void Quack()
{
Console.WriteLine("...");
}
}

public class ExoticQuack : IQuackable


{
public void Quack()
{
Console.WriteLine("Meaow! Meaow!");
}
}

public class SimpleQuack : IQuackable


{
public void Quack()
{
Console.WriteLine("Quack! Quack!");
}
}

public class ExoticDuck : DuckBase


{
public ExoticDuck()
{
quackBehaviour = new ExoticQuack();
}
public override void Display()
{
Console.WriteLine("Hi! I'm an exotic duck.");
}
}

public class SimpleDuck : DuckBase


{
public override void Display()
{
Console.WriteLine("Hi! I'm a simple duck.");
}
}

public class WoodenDuck : DuckBase


{
public WoodenDuck()
{
flyBehaviour = new NoFly();
quackBehaviour = new NoQuack();
}

public override void Display()


{
Console.WriteLine("Hi! I'm a wooden duck!");
}
}

public class RubberDuck : DuckBase


{
public RubberDuck()
{
flyBehaviour = new NoFly();
quackBehaviour = new NoQuack();
}

public override void Display()


{
Console.WriteLine("Hi! I'm a rubber duck!");
}
}

public class UpgradableDuck : DuckBase


{
public UpgradableDuck()
{
flyBehaviour = new NoFly();
quackBehaviour = new NoQuack();
}

public override void Display()


{
Console.WriteLine("I'm an upgradable duck!");
}
}

public class ZigzagFly : IFlyable


{
public void Fly()
{
Console.WriteLine("I'm flying zigzag!");
}
}

public class BassQuack : IQuackable


{
public void Quack()
{
Console.WriteLine("Bass! Bass!");
}
}

public class ZigzagBassDuck : DuckBase


{
public ZigzagBassDuck()
{
flyBehaviour = new ZigzagFly();
quackBehaviour = new BassQuack();
}

public override void Display()


{
Console.WriteLine("Hi! I'm a duck that flies zigzag and quacks bass!");
}
}

public abstract class DuckBase


{
public IFlyable flyBehaviour;
public IQuackable quackBehaviour;

public DuckBase()
{
flyBehaviour = new FlyWithWings();
quackBehaviour = new SimpleQuack();
}

public void SetQuackBehaviour(IQuackable newQuackBehaviour)


{
quackBehaviour = newQuackBehaviour;
}

public void SetFlyBehaviour(IFlyable newFlyBehaviour)


{
flyBehaviour = newFlyBehaviour;
}

public void Swim()


{
Console.WriteLine("I'm swimming");
}

public void Quack()


{
quackBehaviour.Quack();
}
public void Fly()
{
flyBehaviour.Fly();
}

public abstract void Display();


}

class Program
{
static void Main(string[] args)
{
List<DuckBase> ducks = new List<DuckBase>();
ducks.Add(new ExoticDuck());
ducks.Add(new SimpleDuck());
ducks.Add(new WoodenDuck());
ducks.Add(new RubberDuck());
ducks.Add(new ZigzagBassDuck()); // Новая утка
foreach (var duck in ducks)
{
duck.Display();
duck.Swim();
duck.Quack();
duck.Fly();
Console.WriteLine();
}

DuckBase upgradableDuck = new UpgradableDuck();


upgradableDuck.Display();
upgradableDuck.Swim();
upgradableDuck.Quack();
upgradableDuck.Fly();
upgradableDuck.SetFlyBehaviour(new FlyWithWings());
upgradableDuck.SetQuackBehaviour(new ExoticQuack());
upgradableDuck.Quack();
upgradableDuck.Fly();
Console.ReadKey();
}
}

You might also like