/
expens1ve
/
project_war
Обзор
Документация
Войти
/
expens1ve
/
project_war
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
solid
Persistence/BuffFactory.cs
53 строки
2 KB
Vadim
add solid vibes
02 июн 2026, 01:09
02 июн 2026, 01:09
573f19e
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using project_war.Models.Buffs; using project_war.Models.Interfaces; using project_war.Persistence.Interfaces; namespace project_war.Persistence { /// <summary> /// Конкретная реализация IBuffFactory, поддерживающая динамическую регистрацию баффов. /// </summary> public class BuffFactory : IBuffFactory { private readonly Dictionary<string, Func<IUnit, IUnit>> _registry = new(StringComparer.OrdinalIgnoreCase); public BuffFactory() { RegisterDefaultBuffs(); } private void RegisterDefaultBuffs() { Register("Щит", u => new ShieldBuff(u)); Register("Шлем", u => new HelmBuff(u)); Register("Конь", u => new HorseBuff(u)); Register("Копьё", u => new SpearBuff(u)); } /// <summary> /// Регистрирует новую функцию создания баффа. /// </summary> public void Register(string name, Func<IUnit, IUnit> factory) { if (string.IsNullOrWhiteSpace(name)) throw new ArgumentException("Имя баффа не может быть пустым", nameof(name)); _registry[name] = factory ?? throw new ArgumentNullException(nameof(factory)); } /// <inheritdoc /> public IUnit CreateBuff(string buffName, IUnit unit) { if (string.IsNullOrWhiteSpace(buffName)) return unit; if (_registry.TryGetValue(buffName, out var factory)) { return factory(unit); } return unit; } } }