https://pastein.ru/t/UUi
скопируйте уникальную ссылку для отправки
Загрузка данных
using System;
public interface IFly{
void move();
}
public interface IQuack{
void scream();
}
public interface ISwim{
void swim();
}
public class FastFly: IFly{
public void move(){
Console.WriteLine("Быстро летит");
}
}
public class SlowFly: IFly{
public void move(){
Console.WriteLine("Медленно летит");
}
}
public class LaudQuack: IQuack{
public void scream(){
Console.WriteLine("Громко крякает");
}
}
public class QuietQuack: IQuack{
public void scream(){
Console.WriteLine("Тихо крякает");
}
}
public class Swimmer: ISwim{
public void swim(){
Console.WriteLine("Плавает");
}
}
public class Duck{
public IFly DuckFly {get; set;}
public IQuack DuckQuack {get; set;}
public ISwim DuckSwim { get; set; }
public void PerformFly(IFly duck){
duck.move();
}
public void PerformQuack(IQuack duck){
duck.scream();
}
public void PerformSwim(ISwim duck){
duck.swim();
}
public void Swim(){
Console.WriteLine("Плавает\n");
}
public virtual void Display(){}
}
public class WildDuck: Duck{
public WildDuck (IFly DuckMove, IQuack DuckSream, ISwim duckSwim){
DuckFly = DuckMove;
DuckQuack = DuckSream;
duckSwim = DuckSwim;
}
public override void Display(){
Console.WriteLine("Дикая утка");
DuckFly.move();
DuckQuack.scream();
Swim();
}
}
public class HomeDuck: Duck{
public HomeDuck (IFly DuckMove, IQuack DuckSream, ISwim duckSwim){
DuckFly = DuckMove;
DuckQuack = DuckSream;
duckSwim = DuckSwim;
}
public override void Display(){
Console.WriteLine("Домашняя утка");
DuckQuack.scream();
Swim();
}
}
public class RubberDuck: Duck{
public RubberDuck(IFly DuckMove, IQuack DuckSream, ISwim duckSwim){
DuckFly = DuckMove;
DuckQuack = DuckSream;
duckSwim = DuckSwim;
}
public override void Display(){
Console.WriteLine("Резиновая утка");
Swim();
}
}
public class FlyToQuackAdapter: IFly{
IQuack iQuack;
public FlyToQuackAdapter(IQuack iQuack){
this.iQuack = iQuack;
}
public void move(){
iQuack.scream();
}
}
public class FlyToQuackAdapter2: IQuack{
IFly iFly;
public FlyToQuackAdapter2(IFly iFly){
this.iFly = iFly;
}
public void scream(){
iFly.move();
}
}
class HelloWorld {
static void Main() {
ISwim swimmer = new Swimmer();
Duck wildduck = new WildDuck(new FastFly(), new LaudQuack(), swimmer);
Duck homeduck = new HomeDuck(new FastFly(), new LaudQuack(), swimmer);
Duck rubberduck = new RubberDuck(new FastFly(), new LaudQuack(), swimmer);
FastFly fastdly = new FastFly();
Console.WriteLine("Выберите утку:\n1 - Дикую;\n2 - Домашнюю;\n3 - Резиновую.\n");
int c = Convert.ToInt32(Console.ReadLine());
if (c == 0){
return;
}
Duck selDuck = null;
FastFly fastfly = new FastFly();
SlowFly slowfly = new SlowFly();
LaudQuack laudquack = new LaudQuack();
QuietQuack quietquack = new QuietQuack();
IFly adapter = new FlyToQuackAdapter(laudquack);
IFly adapter1 = new FlyToQuackAdapter(quietquack);
IQuack adapter2 = new FlyToQuackAdapter2(fastfly);
IQuack adapter3 = new FlyToQuackAdapter2(slowfly);
switch(c){
case 1:
selDuck = wildduck;
wildduck.PerformFly(fastfly);
wildduck.PerformQuack(laudquack);
wildduck.PerformSwim(swimmer);
break;
case 2:
selDuck = homeduck;
homeduck.PerformQuack(laudquack);
homeduck.PerformSwim(swimmer);
break;
case 3:
selDuck = rubberduck;
rubberduck.PerformSwim(swimmer);
break;
default:
return;
}
while(true){
Console.WriteLine("Выберите действие для дикой утки:\n1 - Быстро летит;\n2 - Медленно летит;\n3 - Громко крякает;\n4 - Тихо крякает;\n5 - Плавает;\n6 - Готово.");
int c1 = Convert.ToInt32(Console.ReadLine());
if (c1 == 0){
return;
}
switch(c1){
case 1:
selDuck.DuckFly = new FastFly();
wildduck.PerformFly(adapter);
break;
case 2:
selDuck.DuckFly = new SlowFly();
wildduck.PerformFly(adapter1);
break;
case 3:
selDuck.DuckQuack = new LaudQuack();
wildduck.PerformQuack(adapter2);
homeduck.PerformQuack(adapter2);
break;
case 4:
selDuck.DuckQuack = new QuietQuack();
wildduck.PerformQuack(adapter3);
homeduck.PerformQuack(adapter3);
break;
case 5:
selDuck.DuckSwim = swimmer;
rubberduck.PerformSwim(swimmer);
break;
default:
selDuck.Display();
return;
}
}
}
}