$instance = new $className(); $instance = new $className();It may be a failure of the programmer, or a failure of the language.
Established "Design Patterns" are hard or impossible to abstract away in a library, or they would not have become standard "Design Patterns".
Instead of looking at conceptual repetitions (of nice design concepts) as a good thing, we should look at them as a workaround for the languages' inability to abstract away these things in a library.
Many design patterns in C++ or Java are just simple closures or dynamically-typed results in Python:
* The Visitor pattern is the combination of multiple-dispatch and inversion of control pattern. Multiple dispatch is possible to generalize in a library for all cases or is a language feature in various languages.
* The inversion of control pattern is just a higher-order function in a language that supports these properly.
* The singleton pattern is just a lazily-initialized global variable, and can be abstracted by a library in some languages.
Design Patterns are in this sense, "language smell". It is a good measure of what kinds of useful things are hard or impossible to implement as libraries.
Schlepping around a particular factory instance is akin to keeping track of the class one desires to instantiate, which is easily achieved in PHP through the use of a string.
A lot of the canonical design patterns are applicable only for harshly statically typed languages such as Java, for dynamic languages like PHP many of those patterns are no longer applicable or useful. It's still quite possible to be a cargo cult programmer even if you happen to be using highfalutin' GoF design patterns.