Advertisement
yakovmonarh

Абстрактная фабрика (Abstract Factory)

Aug 19th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.86 KB | None | 0 0
  1. using System;
  2.  
  3. class Program
  4. {
  5.    static void Main(string[] args)
  6.    {
  7.         var elf = new Hero(new ElfFactory());
  8.         Console.WriteLine("Эльф передвигается");
  9.         elf.Run();
  10.         Console.WriteLine("Эльф дерется");
  11.         elf.Hit();
  12.        
  13.         var voin = new Hero(new VoinFactory());
  14.         Console.WriteLine("Воин двигается");
  15.         voin.Run();
  16.         Console.WriteLine("Воин дерется");
  17.         voin.Hit();
  18.        
  19.         Console.ReadLine();
  20.    }
  21. }
  22.  
  23. abstract class Weapon
  24. {
  25.     public abstract void Hit();
  26. }
  27.  
  28. abstract class Movement
  29. {
  30.     public abstract void Move();
  31. }
  32.  
  33. class Arbalet: Weapon
  34. {
  35.     public override void Hit()
  36.     {
  37.         Console.WriteLine("Стрьба из арбалета");
  38.     }
  39. }
  40.  
  41. class Sword: Weapon
  42. {
  43.     public override void Hit()
  44.     {
  45.         Console.WriteLine("Удара мечом");
  46.     }
  47. }
  48.  
  49. class FlyMovement: Movement
  50. {
  51.     public override void Move()
  52.     {
  53.         Console.WriteLine("Полет");
  54.     }
  55. }
  56.  
  57. class RunMovement: Movement
  58. {
  59.     public override void Move()
  60.     {
  61.         Console.WriteLine("Бег");
  62.     }
  63. }
  64.  
  65. abstract class HeroFactory
  66. {
  67.     abstract public Weapon CreateWeapon();
  68.     abstract public Movement CreateMovement();
  69. }
  70.  
  71. class ElfFactory: HeroFactory
  72. {
  73.     public override Weapon CreateWeapon()
  74.     {
  75.         return new Arbalet();
  76.     }
  77.    
  78.     public override Movement CreateMovement()
  79.     {
  80.         return new FlyMovement();
  81.     }
  82. }
  83.  
  84. class VoinFactory: HeroFactory
  85. {
  86.     public override Weapon CreateWeapon()
  87.     {
  88.         return new Sword();
  89.     }
  90.    
  91.     public override Movement CreateMovement()
  92.     {
  93.         return new RunMovement();
  94.     }
  95. }
  96.  
  97. class Hero
  98. {
  99.     private Weapon weapon;
  100.     private Movement movement;
  101.    
  102.     public Hero(HeroFactory factory)
  103.     {
  104.         weapon = factory.CreateWeapon();
  105.         movement = factory.CreateMovement();
  106.     }
  107.    
  108.     public void Run()
  109.     {  
  110.         movement.Move();
  111.     }
  112.    
  113.     public void Hit()
  114.     {
  115.         weapon.Hit();
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement