As soon as you put a static method on a Class, anything calling that method is tied to the specific implementation that has the static method attached. In a similar situation, I’ve just used Abstract Factories in a registry, and then looked up the specific factory needed based on its properties (i.e. there’s one builder that knows how to find the correct builder for each item in a data set and will call it with the data and return back the instantiated objects).
I’ve found chain of responsibility more useful for event handling, where each link in the chain handles a specific set of conditions. For example, if you have a keyboard chain for “S” with the ctrl key down that would run the save command. And if the ctrl key is not down, responsibility goes to the “S” that does not look for the ctrl key, that runs the sell command, and then when you go to a different part of the program where you can’t sell, you remove the simple “S” link from the chain.
