Software design pattern: Difference between revisions

Content deleted Content added
m v2.05 - Autofix / Fix errors for CW project (Link equal to linktext)
Removed content without reliable source. Added some more content.
Line 1:
{{short description|Reusable solution to a commonly occurring software problem}}
 
In [[software engineering]], a '''software design pattern''' orrefers '''design pattern''' isto a generalreusable, [[reusability|reusable]]proven solution to a commonlyspecific, occurringrecurring problem intypically manyfocused contextson in [[softwarecomponent-level design]], though they can sometimes span multiple components. Design patterns address specific issues related to object creation, interaction, or behavior. <ref>{{cite book |last=Alexandrescu |first=Andrei |date= 2001 |title= Modern C++ Design: Generic Programming and Design Patterns Applied |publisher=Addison-Wesley |page=xviii |isbn=978-0-201-70431-0 }}</ref><ref Aname="O'Reilly designMedia">{{Cite patternbook is|title=Fundamentals notof aSoftware rigidArchitecture: structureAn thatEngineering canApproach be|publisher=O'Reilly transplantedMedia directly|year=2020 into|isbn=978-1492043454}}</ref><ref [[sourcename=":0">{{Cite code]].book Rather,|title=Design itPatterns: isElements aof descriptionReusable orObject-Oriented aSoftware template|isbn=978-0201633610}}</ref><ref forname=":1">{{Cite solvingbook a particular type|title=Patterns of problemEnterprise thatApplication can be deployed in many different situations. Design patterns canArchitecture be viewed as formalized [[best practice]]s that the programmer may use to solve common problems when designing a software application or system.|isbn=978-0321127426}}</ref>
 
[[Object-oriented]] design patterns typically show relationships and interactions between [[class (computer science)|class]]es or [[object (computer science)|object]]s, without specifying the final application classes or objects that are involved. Patterns that imply mutable state may be unsuited for [[functional programming]] languages. Some patterns can be rendered unnecessary in languages that have built-in support for solving the problem they are trying to solve, and object-oriented patterns are not necessarily suitable for non-object-oriented languages.
 
Design patterns may be viewed as a structured approach to [[computer programming]] intermediate between the levels of a [[programming paradigm]] and a concrete [[algorithm]].
 
==History==
Line 131 ⟶ 127:
}}</ref>
 
== Connections to other topics ==
==Practice==
 
Software design patterns offer the finest granularity compared to software architecture patterns and software architecture styles, as design patterns focus on solving detailed, low-level design problems within individual components or subsystems. Examples include Singleton, Factory Method, and Observer. <ref name="O'Reilly Media" /><ref name=":0" /><ref name=":1" />
 
[[List of software architecture styles and patterns|Software Architecture Pattern]] refers to a reusable, proven solution to a recurring problem at the system level, addressing concerns related to the overall structure, component interactions, and quality attributes of the system. Software architecture patterns operate at a higher level of abstraction than design patterns, solving broader system-level challenges. While these patterns typically affect system-level concerns, the distinction between architectural patterns and architectural styles can sometimes be blurry. Examples include [[Circuit breaker design pattern|Circuit Breaker]]. <ref name="O'Reilly Media" /><ref name=":0" /><ref name=":1" />
 
[[List of software architecture styles and patterns|Software Architecture Style]] refers to a high-level structural organization that defines the overall system organization, specifying how components are organized, how they interact, and the constraints on those interactions. Architecture styles typically include a vocabulary of component and connector types, as well as semantic models for interpreting the system's properties. These styles represent the most coarse-grained level of system organization. Examples include [[Multitier architecture|Layered Architecture]], [[Microservices]], and [[Event-driven architecture|Event-Driven Architecture]]. <ref name="O'Reilly Media" /><ref name=":0" /><ref name=":1" />
 
== Practice ==
 
Design patterns can speed up the development process by providing proven development paradigms.<ref>{{cite web