namespace SHJX.Service.Control.PortProduction.PortProducerImpl { public class WritePortProducer : IPortProducer { private static readonly ConcurrentDictionary PortArgs = new(); public WritePortProducer(OptCommand command) : base(command) { } protected override IPortArg GetPortArg(ArgType type) { if (PortArgs.TryGetValue(type, out IPortArg port)) { return port; } IPortArg portArg = type switch { ArgType.Move => new MovePortArg(), ArgType.Stop => new StopPortArg(), ArgType.GoBack => new GoBackPortArg(), ArgType.Speed => new SpeedPortArg(), ArgType.AcSpeed => new AcSpeedPortArg(), ArgType.DeSpeed => new DeSpeedPortArg(), ArgType.Open => new OpenPortArg(), ArgType.Close => new ClosePortArg(), ArgType.Temp => new TemperaturePortArg(), ArgType.Pid => new PidPortArg(), ArgType.Ratio => new RatioPortArg(), ArgType.Integral => new IntegralPortArg(), ArgType.Differential => new DifferentialPortArg(), ArgType.IntegralDeafult => new IntegralDeafultPortArg(), _ => throw new ArgumentException("未找到对应的枚举!") }; PortArgs.TryAdd(type, portArg); return portArg; } } }