Cannot reduce cyclic complexity in Factory method without using reflection

In my factory method, I use the Switch statement to create specific objects. This leads to a very high cyclic complexity. Here is a sample code:

private static UnitDescriptor createUnitDescriptor(string code) { switch (code) { case UnitCode.DEG_C: return new UnitDescriptorDegC(); case UnitCode.DEG_F: return new UnitDescriptorDegF(); : : default: throw new SystemException(string.format("unknown code: {o}", code); } } 

How can I reorganize this to reduce cyclic complexity? If I use reflection to create objects or something else to create objects, is this better than the method above?

+6
source share
1 answer

You can use Dictionary to completely remove the switch :

 class MyClass { private static Dictionary<string, Func<UnitDescriptor>> dict = new Dictionary<string, Func<UnitDescriptor>>(); static MyClass() { dict.Add(UnitCode.DEG_C, () => new UnitDescriptorDegC()); dict.Add(UnitCode.DEG_F, () => new UnitDescriptorDegF()); // Other mappings... } private static UnitDescriptor createUnitDescriptor(string code) { Func<UnitDescriptor> value; if (dict.TryGetValue(code, out value)) { return value(); } throw new SystemException(string.Format("unknown code: {0}", code)); } } 
+8
source

Source: https://habr.com/ru/post/952345/


All Articles