using System; using System.Collections.Generic; using System.Linq; using cfg; namespace Activity.Condition { /// /// 条件检查器工厂 - 从配置表加载 /// public class ConditionCheckerFactory { private static Dictionary _checkerTypeMap; private static Dictionary _checkerMap; public static void Initialize() { _checkerTypeMap = new Dictionary { { ConditionType.AccountLevel, typeof(AccountLevelConditionChecker) }, { ConditionType.GetFishCount, typeof(FishCountConditionChecker) }, // ... 更多条件类型映射 }; _checkerMap ??= new Dictionary(); } public static IConditionChecker CreateCheckerByConditionType(ConditionType conditionType) { return !_checkerTypeMap.TryGetValue(conditionType, out var type) ? new DefaultConditionChecker() : CreateCheckerByType(type); } private static IConditionChecker CreateCheckerByType(Type type) { if (_checkerMap.TryGetValue(type, out var checker)) return checker; _checkerMap[type] = checker=(IConditionChecker)Activator.CreateInstance(type); return checker; } public static List GetAllCommonCheckers() { // 从配置或约定加载所有通用检查器 var checkerTypes = new[] { typeof(TimeConditionChecker), typeof(ABTestConditionChecker), }; return checkerTypes.Select(CreateCheckerByType).Where(checker => checker != null).ToList(); } public class DefaultConditionChecker : IConditionChecker { public int Priority => 999; public bool CanOpen(FishingEvent @event) => true; public List CareDataChangeWithType => null; public bool NeedContinueListenAfterSatisfied => false; } } }