A Modern Alternative to Abstract Factory Filtered Dependencies –

by Blog Admin
0 comment

Join the MaximusDevs community and get the full member experience.

Join For Free

I’ve mentioned before that I really don’t like the Abstract Factory pattern, and in particular, code like this:

static IGUIFactory CreateOsSpecificFactory()  {     string sysType = ConfigurationSettings.AppSettings["OS_TYPE"];     if (sysType == "Win")      {         return new WindowsFactory();     }      else      {         return new MacFactory();   } }

One of the comments mentioned that this might not be ideal, but it is still better than:

if(RunningOnWindows)  {     // code  }  else if(RunningOnMac)  {     // code  }  else if(RunningOnLinux)  {     // code }

And I agree. But I think that, as the comment mentioned, a far better alternative would be using the container. You can do this using:

[OperationSystem("Windows")] public class WindowsFactory : IGUIFactory { }  [OperationSystem("Linux")] public class LinuxFactory : IGUIFactory { } [OperationSystem("Mac")] public class MacFactory : IGUIFactory { }

Then you just need to wire things through the container. Among other things, this means that we respect the open / closed principle. If we need to support a new system, we can just add a new class, we don’t need to modify code.

Remember, the Go4 book was written in the age of C++. Reflection didn’t exists, and that means that a lot of patterns do by hands things that can happen automatically.

Factory (object-oriented programming)


  • Hyperion Essbase Technical Functionality

  • Getting a Public SSL Certificate Free of Cost for a Lifetime

  • How to Handle Secrets in Kubernetes

  • Improve Application Latency With Read Replicas Using YugabyteDB [Video]

You may also like

Leave a Comment