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