Advertisement
illiden

PatternDecorator

Apr 3rd, 2020
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.55 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 Events
  8. {
  9.     delegate void PongYou();
  10.     delegate bool Comparer(int a, int b);
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             Beverage beverage1 = new Espresso();
  16.             Console.WriteLine(beverage1.GetDescription() + " $" + beverage1.Cost());
  17.             Console.WriteLine();
  18.  
  19.             Beverage beverage11 = new Espresso();
  20.             beverage11.SetSize(3);
  21.             Console.WriteLine(beverage11.GetDescription() + " $" + beverage11.Cost());
  22.             Console.WriteLine();
  23.  
  24.             Beverage beverage2 = new DarkRoast();
  25.             beverage2 = new Mocha(beverage2);
  26.             beverage2 = new Mocha(beverage2);
  27.             beverage2 = new Whip(beverage2);
  28.             Console.WriteLine(beverage2.GetDescription() + " $" + beverage2.Cost());
  29.             Console.WriteLine();
  30.  
  31.             Beverage beverage22 = new DarkRoast();
  32.             beverage22.SetSize(2);
  33.             beverage22 = new Mocha(beverage22);
  34.             beverage22 = new Mocha(beverage22);
  35.             beverage22 = new Whip(beverage22);
  36.             Console.WriteLine(beverage22.GetDescription() + " $" + beverage22.Cost());
  37.             Console.WriteLine();
  38.  
  39.             Beverage beverage3 = new HouseBlend();
  40.             beverage3 = new Soy(beverage3);
  41.             beverage3 = new Mocha(beverage3);
  42.             beverage3 = new Whip(beverage3);
  43.             Console.WriteLine(beverage3.GetDescription() + " $" + beverage3.Cost());
  44.             Console.WriteLine();
  45.  
  46.             Beverage beverage33 = new HouseBlend();
  47.             beverage33.SetSize(1);
  48.             beverage33 = new Soy(beverage33);
  49.             beverage33 = new Mocha(beverage33);
  50.             beverage33 = new Whip(beverage33);
  51.             Console.WriteLine(beverage33.GetDescription() + " $" + beverage33.Cost());
  52.             Console.WriteLine();
  53.             Console.ReadKey();
  54.         }
  55.     }
  56.  
  57.     class Whip : CondimentDecorator
  58.     {
  59.         private Beverage _beverage;
  60.         public Whip(Beverage beverage)
  61.         {
  62.             _beverage = beverage;
  63.         }
  64.  
  65.         public override float Cost()
  66.         {
  67.             float cost = _beverage.Cost();
  68.             switch (GetSize())
  69.             {
  70.                 case 1:
  71.                     cost += 0.02f;
  72.                     break;
  73.                 case 2:
  74.                     cost += 0.05f;
  75.                     break;
  76.                 case 3:
  77.                     cost += 0.10f;
  78.                     break;
  79.             }
  80.             return cost;
  81.         }
  82.  
  83.         public override int GetSize()
  84.         {
  85.             return _beverage.GetSize();
  86.         }
  87.  
  88.         public override string GetDescription()
  89.         {
  90.             return _beverage.GetDescription() + " + Взбитые сливки";
  91.         }
  92.     }
  93.  
  94.     class Soy : CondimentDecorator
  95.     {
  96.         private Beverage _beverage;
  97.         public Soy(Beverage beverage)
  98.         {
  99.             _beverage = beverage;
  100.         }
  101.  
  102.         public override float Cost()
  103.         {
  104.             float cost = _beverage.Cost();
  105.             switch (GetSize())
  106.             {
  107.                 case 1:
  108.                     cost += 0.02f;
  109.                     break;
  110.                 case 2:
  111.                     cost += 0.08f;
  112.                     break;
  113.                 case 3:
  114.                     cost += 0.15f;
  115.                     break;
  116.             }
  117.             return cost;
  118.         }
  119.  
  120.         public override int GetSize()
  121.         {
  122.             return _beverage.GetSize();
  123.         }
  124.  
  125.         public override string GetDescription()
  126.         {
  127.             return _beverage.GetDescription() + " + Соя";
  128.         }
  129.     }
  130.  
  131.     class Mocha : CondimentDecorator
  132.     {
  133.         private Beverage _beverage;
  134.         public Mocha(Beverage beverage)
  135.         {
  136.             _beverage = beverage;
  137.         }
  138.  
  139.         public override float Cost()
  140.         {
  141.             float cost = _beverage.Cost();
  142.             switch (GetSize())
  143.             {
  144.                 case 1:
  145.                     cost += 0.05f;
  146.                     break;
  147.                 case 2:
  148.                     cost += 0.10f;
  149.                     break;
  150.                 case 3:
  151.                     cost += 0.20f;
  152.                     break;
  153.             }
  154.             return cost;
  155.         }
  156.  
  157.         public override int GetSize()
  158.         {
  159.             return _beverage.GetSize();
  160.         }
  161.  
  162.         public override string GetDescription()
  163.         {
  164.             return _beverage.GetDescription() + " + Шоколад";
  165.         }
  166.     }
  167.  
  168.     class Decaf : Beverage
  169.     {
  170.         public Decaf()
  171.         {
  172.             _description = "Без кофеина";
  173.         }
  174.  
  175.         public override float Cost()
  176.         {
  177.             switch (GetSize())
  178.             {
  179.                 case 1:
  180.                     return 0.35f;
  181.                 case 2:
  182.                     return 0.65f;
  183.                 case 3:
  184.                     return 0.99f;
  185.                 default:
  186.                     return 0f;
  187.             }
  188.         }
  189.     }
  190.  
  191.     class DarkRoast : Beverage
  192.     {
  193.         public DarkRoast()
  194.         {
  195.             _description = "Темная обжарка";
  196.         }
  197.  
  198.         public override float Cost()
  199.         {
  200.             switch (GetSize())
  201.             {
  202.                 case 1:
  203.                     return 0.35f;
  204.                 case 2:
  205.                     return 0.65f;
  206.                 case 3:
  207.                     return 0.99f;
  208.                 default:
  209.                     return 0f;
  210.             }
  211.         }
  212.     }
  213.  
  214.     class HouseBlend : Beverage
  215.     {
  216.         public HouseBlend()
  217.         {
  218.             _description = "Домашняя обжарка";
  219.         }
  220.  
  221.         public override float Cost()
  222.         {
  223.             switch (GetSize())
  224.             {
  225.                 case 1:
  226.                     return 0.25f;
  227.                 case 2:
  228.                     return 0.55f;
  229.                 case 3:
  230.                     return 0.89f;
  231.                 default:
  232.                     return 0f;
  233.             }
  234.         }
  235.     }
  236.  
  237.     class Espresso : Beverage
  238.     {
  239.         public Espresso()
  240.         {
  241.             _description = "Обычный эспрессо";
  242.         }
  243.  
  244.         public override float Cost()
  245.         {
  246.             switch(GetSize())
  247.             {
  248.                 case 1:
  249.                     return 1.00f;
  250.                 case 2:
  251.                     return 1.55f;
  252.                 case 3:
  253.                     return 1.99f;
  254.                 default:
  255.                     return 0f;
  256.             }
  257.         }
  258.     }
  259.  
  260.     abstract class Beverage
  261.     {
  262.         protected string _description = "Какое-то определение";
  263.         private int _size = 1;
  264.  
  265.         public virtual string GetDescription()
  266.         {
  267.             return _description;
  268.         }
  269.  
  270.         public virtual void SetSize(int size)
  271.         {
  272.             switch (size)
  273.             {
  274.                 case 1:
  275.                     _size = 1;
  276.                     break;
  277.                 case 2:
  278.                     _size = 2;
  279.                     break;
  280.                 case 3:
  281.                     _size = 3;
  282.                     break;
  283.             }
  284.         }
  285.  
  286.         public virtual int GetSize()
  287.         {
  288.             return _size;
  289.         }
  290.  
  291.         public abstract float Cost();
  292.     }
  293.  
  294.     abstract class CondimentDecorator : Beverage
  295.     {
  296.         public abstract override string GetDescription();
  297.     }
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement