149 lines
2.6 KiB
C#
149 lines
2.6 KiB
C#
/* Абстрактная фабрика
|
||
Предоставляет интерфейс для создания
|
||
групп связанных или зависимых объектов,
|
||
не указывая их конкретный класс
|
||
*/
|
||
class Program
|
||
{
|
||
static void Main()
|
||
{
|
||
#region Пример №1 - базовое
|
||
var soldier = new Hero(new SoldierFactory());
|
||
soldier.Run();
|
||
soldier.Hit();
|
||
|
||
var elf = new Hero(new ElfFactory());
|
||
elf.Run();
|
||
elf.Hit();
|
||
|
||
Console.ReadKey();
|
||
#endregion
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Оружие базовая логика
|
||
/// </summary>
|
||
abstract class Weapon
|
||
{
|
||
public abstract void Hit();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Движение базовая логика
|
||
/// </summary>
|
||
abstract class Movement
|
||
{
|
||
public abstract void Move();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Огнестрел
|
||
/// </summary>
|
||
class Gun : Weapon
|
||
{
|
||
public override void Hit()
|
||
{
|
||
Console.WriteLine("Hit Gun");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Арбалет
|
||
/// </summary>
|
||
class Arbalet : Weapon
|
||
{
|
||
public override void Hit()
|
||
{
|
||
Console.WriteLine("Hit Arbalet");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Герой летает
|
||
/// </summary>
|
||
class Fly : Movement
|
||
{
|
||
public override void Move()
|
||
{
|
||
Console.WriteLine("Hero Fly");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Герой бежит
|
||
/// </summary>
|
||
class Run : Movement
|
||
{
|
||
public override void Move()
|
||
{
|
||
Console.WriteLine("Hero Run");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Супергерой
|
||
/// </summary>
|
||
class Hero
|
||
{
|
||
private Weapon Weapon { get; set; }
|
||
private Movement Movement { get; set; }
|
||
|
||
public Hero(HeroFactory factory)
|
||
{
|
||
Weapon = factory.CreateWeapon();
|
||
Movement = factory.CreateMovement();
|
||
}
|
||
|
||
public void Run()
|
||
{
|
||
Movement.Move();
|
||
}
|
||
|
||
public void Hit()
|
||
{
|
||
Weapon.Hit();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Абстракция фабрика героев
|
||
/// </summary>
|
||
abstract class HeroFactory
|
||
{
|
||
public abstract Weapon CreateWeapon();
|
||
public abstract Movement CreateMovement();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Эльфы
|
||
/// </summary>
|
||
class ElfFactory : HeroFactory
|
||
{
|
||
public override Movement CreateMovement()
|
||
{
|
||
return new Fly();
|
||
}
|
||
|
||
public override Weapon CreateWeapon()
|
||
{
|
||
return new Arbalet();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Солдаты
|
||
/// </summary>
|
||
class SoldierFactory : HeroFactory
|
||
{
|
||
public override Movement CreateMovement()
|
||
{
|
||
return new Run();
|
||
}
|
||
|
||
public override Weapon CreateWeapon()
|
||
{
|
||
return new Gun();
|
||
}
|
||
}
|