Some suggest that the need for a design pattern may be a sign that a feature is missing from a programming language.
Peter Norvig demonstrates that 16 out of the 23 patterns in the
Design Patterns book (which is primarily focused on C++) are simplified or eliminated (via direct language support) in
Lisp or
Dylan. Related observations were made by Hannemann and Kiczales who implemented several of the 23 design patterns using an
aspect-oriented programming language (AspectJ) and showed that code-level dependencies were removed from the implementations of 17 of the 23 design patterns and that aspect-oriented programming could simplify the implementations of design patterns. See also
Paul Graham's essay "Revenge of the Nerds". Inappropriate use of patterns may unnecessarily increase complexity. FizzBuzzEnterpriseEdition offers a humorous example of over-complexity introduced by design patterns. By definition, a pattern must be programmed anew into each application that uses it. Since some authors see this as a step backward from
software reuse as provided by
components, researchers have worked to turn patterns into components. Meyer and Arnout were able to provide full or partial componentization of two-thirds of the patterns they attempted. In order to achieve flexibility, design patterns may introduce additional levels of
indirection, which may complicate the resulting design and decrease
runtime performance. == Related ==