illiden

PatternStrategy

Apr 2nd, 2020
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.93 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Strategy
  8. {
  9.  
  10.     class Program
  11.     {
  12.  
  13.         static void Main(string[] args)
  14.         {
  15.             RedHeadDuck redHead = new RedHeadDuck();
  16.             redHead.Start();
  17.             Console.WriteLine();
  18.  
  19.             MallardDuck mallardDuck = new MallardDuck();
  20.             mallardDuck.Start();
  21.             Console.WriteLine();
  22.  
  23.             RubberDuck rubberDuck = new RubberDuck();
  24.             rubberDuck.Start();
  25.             Console.WriteLine();
  26.  
  27.             ModelDuck modelDuck = new ModelDuck();
  28.             modelDuck.SetFlyBeahaviour(new FlyRocket());
  29.             modelDuck.Start();
  30.             Console.WriteLine();
  31.  
  32.             Console.ReadKey();
  33.         }
  34.     }
  35.  
  36.     class ModelDuck : Duck
  37.     {
  38.         public ModelDuck()
  39.         {
  40.             _quackBehaviour = new MuteQuackable();
  41.             _flyBehaviour = new FlyNoWings();
  42.         }
  43.  
  44.         public override void Display()
  45.         {
  46.             Console.Write("Я деревянный утк! ");
  47.         }
  48.     }
  49.  
  50.     class RubberDuck : Duck
  51.     {
  52.         public RubberDuck()
  53.         {
  54.             _quackBehaviour = new Squeakable();
  55.             _flyBehaviour = new FlyNoWings();
  56.         }
  57.         public override void Display()
  58.         {
  59.             Console.Write("Я RubberDuck! ");
  60.         }
  61.     }
  62.  
  63.     class RedHeadDuck : Duck
  64.     {
  65.         public RedHeadDuck()
  66.         {
  67.             _quackBehaviour = new Quackable();
  68.             _flyBehaviour = new FlyWithWings();
  69.         }
  70.         public override void Display()
  71.         {
  72.             Console.Write("Я RedHeadDuck! ");
  73.         }
  74.     }
  75.  
  76.     class MallardDuck : Duck
  77.     {
  78.         public MallardDuck()
  79.         {
  80.             _quackBehaviour = new Quackable();
  81.             _flyBehaviour = new FlyWithWings();
  82.         }
  83.         public override void Display()
  84.         {
  85.             Console.Write("Я MallardDuck! ");
  86.         }
  87.     }
  88.  
  89.     interface IFlyBehaviour
  90.     {
  91.         void Fly();
  92.     }
  93.  
  94.     interface IQuackBehaviour
  95.     {
  96.         void Quack();
  97.     }
  98.  
  99.     class FlyWithWings : IFlyBehaviour
  100.     {
  101.         public void Fly()
  102.         {
  103.             Console.Write("Взлетаюю) ");
  104.         }
  105.     }
  106.  
  107.     class FlyNoWings : IFlyBehaviour
  108.     {
  109.         public void Fly()
  110.         {
  111.             Console.Write("А я летать не умею( ");
  112.         }
  113.     }
  114.  
  115.     class FlyRocket : IFlyBehaviour
  116.     {
  117.         public void Fly()
  118.         {
  119.             Console.Write("Ракеткой вперед!!! ");
  120.         }
  121.     }
  122.  
  123.     class Quackable : IQuackBehaviour
  124.     {
  125.         public void Quack()
  126.         {
  127.             Console.Write("Кряяя! ");
  128.         }
  129.     }
  130.  
  131.     class Squeakable : IQuackBehaviour
  132.     {
  133.         public void Quack()
  134.         {
  135.             Console.Write("Пиии! ");
  136.         }
  137.     }
  138.  
  139.     class MuteQuackable : IQuackBehaviour
  140.     {
  141.         public void Quack()
  142.         {
  143.            
  144.         }
  145.     }
  146.  
  147.     abstract class Duck
  148.     {
  149.         protected IQuackBehaviour _quackBehaviour;
  150.         protected IFlyBehaviour _flyBehaviour;
  151.         public void Start()
  152.         {
  153.             Display();
  154.             PerfornQuack();
  155.             Swim();
  156.             PerformFly();
  157.         }
  158.  
  159.         public abstract void Display();
  160.  
  161.         public void Swim()
  162.         {
  163.             Console.Write("Я пополыл... ");
  164.         }
  165.  
  166.         public void PerfornQuack()
  167.         {
  168.             _quackBehaviour.Quack();
  169.         }
  170.  
  171.         public void PerformFly()
  172.         {
  173.             _flyBehaviour.Fly();
  174.         }
  175.  
  176.         public void SetFlyBeahaviour(IFlyBehaviour flyBehaviour)
  177.         {
  178.             _flyBehaviour = flyBehaviour;
  179.         }
  180.  
  181.         public void SetQuackBehaviour(IQuackBehaviour quackBehaviour)
  182.         {
  183.             _quackBehaviour = quackBehaviour;
  184.         }
  185.     }
  186. }
Advertisement
Add Comment
Please, Sign In to add comment