Knowledge

Software design pattern

Source đź“ť

1818:
The documentation for a design pattern describes the context in which the pattern is used, the forces within the context that the pattern seeks to resolve, and the suggested solution. There is no single, standard format for documenting design patterns. Rather, a variety of different formats have been
1777:
Avoiding the need for runtime concurrent mechanisms, because exclusive ownership can be proven. This is a notable capability of the Rust language, but compile-time checking isn't the only means, a programmer will often manually design such patterns into code - omitting the use of locking mechanism
1314:
Define common functionality for a group of classes. The servant pattern is also frequently called helper class or utility class implementation for a given set of classes. The helper classes generally have no objects hence they have all static methods that act upon different kinds of class objects.
2152:
Ward cautioned against requiring too much programming at, what he termed, 'the high level of wizards.' He pointed out that a written 'pattern language' can significantly improve the selection and application of abstractions. He proposed a 'radical shift in the burden of design and implementation'
1792:
x86 and other CPU architectures support a range of atomic instructions that guarantee memory safety for modifying and accessing primitive values (integers). For example, two threads may both increment a counter safely. These capabilities can also be used to implement the mechanisms for other
416:
Design patterns can speed up the development process by providing proven development paradigms. Effective software design requires considering issues that may not become apparent until later in the implementation. Freshly written code can often have hidden, subtle issues that take time to be
431:
to the 1996 OOPSLA Convention. Here he reflected on how his work on Patterns in Architecture had developed and his hopes for how the Software Design community could help Architecture extend Patterns to create living structures that use generative schemes that are more like computer code.
448:, as a set of program constituents (e.g., classes, methods...) and their relationships. A developer adapts the motif to their codebase to solve the problem described by the pattern. The resulting code has structure and organization similar to the chosen motif. 812:
Convert the interface of a class into another interface clients expect. An adapter lets classes work together that could not otherwise because of incompatible interfaces. The enterprise integration pattern equivalent is the translator.
642:
Tactic of delaying the creation of an object, the calculation of a value, or some other expensive process until the first time it is needed. This pattern appears in the GoF catalog as "virtual proxy", an implementation strategy for the
494:
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.
1969:(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 1823:, certain pattern forms have become more well-known than others, and consequently become common starting points for new pattern-writing efforts. One example of a commonly used documentation format is the one used by 1129:
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.
1149:
Encapsulate a request as an object, thereby allowing for the parameterization of clients with different requests, and the queuing or logging of requests. It also allows for the support of undoable operations.
714:
Specify the kinds of objects to create using a prototypical instance, and create new objects from the 'skeleton' of an existing object, thus boosting performance and keeping memory footprints to a minimum.
1399:
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
417:
detected; issues that sometimes can cause major problems down the road. Reusing design patterns can help to prevent such issues, and enhance code readability for those familiar with the patterns.
1743:
A number of threads are created to perform a number of tasks, which are usually organized in a queue. Typically, there are many more tasks than threads. Can be considered a special case of the
92:. In contrast, to use a pattern, a programmer writes code as described by the pattern. The result is unique every time even though the result may be recognizable as based on the pattern. 1605:
Join-pattern provides a way to write concurrent, parallel and distributed programs by message passing. Compared to the use of threads and locks, this is a high-level programming model.
456:
Efforts have also been made to codify design patterns in particular domains, including the use of existing design patterns as well as domain-specific design patterns. Examples include
1419:
Represent an operation to be performed on instances of a set of classes. Visitor lets a new operation be defined without changing the classes of the elements on which it operates.
1550:
Reduce the overhead of acquiring a lock by first testing the locking criterion (the 'lock hint') in an unsafe manner; only if that succeeds does the actual locking logic proceed.
2257:
If you want to speed up the development of your .NET applications, you're ready for C# design patterns -- elegant, accepted and proven ways to tackle common programming problems.
1987:, 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. 870:
Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality.
3046: 1169:
Design an API to be method chained so that it reads like a DSL. Each method call returns a context through which the next logical method call(s) are made available.
851:
Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
2270: 2153:
basing the new methodology on an adaptation of Christopher Alexander's work in pattern languages and that programming-oriented pattern languages developed at
1380:
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
1295:
Define a one-to-many dependency between objects where a state change in one object results in all its dependents being notified and updated automatically.
1689:
Allows concurrent read access to an object, but requires exclusive access for write operations. An underlying semaphore might be used for writing, and a
1188:
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
175:
was set up for documentation of design patterns. The scope of the term remains a matter of dispute. Notable books in the design pattern genre include:
3747: 2079: 408:
Although design patterns have been applied practically for a long time, formalization of the concept of design patterns languished for several years.
925:
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
581:
Separate the construction of a complex object from its representation, allowing the same construction process to create various representations.
1450: 729: 1522:
The same calculation many times in parallel, differing by integer parameters used with non-branching pointer math into shared arrays, such as
3711: 3686: 3660: 3639: 3616: 3590: 3565: 3542: 3512: 3486: 3459: 3436: 3411: 3364: 3333: 3302: 3275: 3249: 3204: 3174: 3148: 3105: 3079: 3056: 2722: 2686: 2644: 2611: 2577: 2546: 2506: 1466:
Decouples method execution from method invocation that reside in their own thread of control. The goal is to introduce concurrency, by using
376: 349: 324: 298: 254: 232: 210: 1253:
Without violating encapsulation, capture and externalize an object's internal state allowing the object to be restored to this state later.
687:
Avoid expensive acquisition and release of resources by recycling objects that are no longer in use. Can be considered a generalisation of
167:
was published in 1994 by the so-called "Gang of Four" (Gamma et al.), which is frequently abbreviated as "GoF". That same year, the first
1979:
By definition, a pattern must be programmed anew into each application that uses it. Since some authors see this as a step backward from
2084: 2008: 490:, without specifying the final application classes or objects that are involved. Patterns that imply mutable state may be unsuited for 4272: 3389: 3223: 1832: 398: 276: 188: 4380: 4297: 3313: 3259: 3233: 2965: 2924: 2843: 2593: 2528: 2290: 2053: 1995: 1970: 1932:
Other patterns that have some relationship with the pattern; discussion of the differences between the pattern and similar patterns.
1820: 1589:
Manages operations that require both a lock to be acquired and a precondition to be satisfied before the operation can be executed.
308: 3347: 889:
Extend a class by composition instead of subclassing. The object handles a request by delegating to a second object (the delegate)
4070: 2114: 1568: 468: 168: 2893:
Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications - OOPSLA '02
4245: 3869: 3422: 1124: 335: 138:(c.f. his article, "The Pattern of Streets," JOURNAL OF THE AIP, September, 1966, Vol. 32, No. 5, pp. 273–278). In 1987, 4053: 3963: 2908: 2058: 1794: 1467: 623:
object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
420:
Software design techniques are difficult to apply to a broader range of problems. Design patterns provide general solutions,
4093: 4063: 4058: 4385: 3740: 2818: 2275:
Software Applications: Concepts, Methodologies, Tools, and Applications: Concepts, Methodologies, Tools, and Applications
1962: 1798: 1531: 4338: 4176: 2713:
Nagel, Christian; Evjen, Bill; Glynn, Jay; Watson, Karli; Skinner, Morgan (2008). "Event-based Asynchronous Pattern".
2104: 2043: 1966: 1965:. Related observations were made by Hannemann and Kiczales who implemented several of the 23 design patterns using an 1958: 1942: 1098: 1010:
Group several related elements, such as classes, singletons, methods, globally used, into a single conceptual entity.
172: 1506:
Combining multiple observers to force properties in different objects to be synchronized or coordinated in some way.
963:
The pattern relates to the design of Web applications. It provides a centralized entry point for handling requests.
3953: 2786:"Object Interconnections: Comparing Alternative Programming Techniques for Multi-threaded CORBA Servers (Column 7)" 2447: 2422: 2074: 2028: 1552:
Can be unsafe when implemented in some language/hardware combinations. It can therefore sometimes be considered an
1501: 1361:
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
1234:
by keeping objects from referring to each other explicitly, and it allows their interaction to vary independently.
4161: 4156: 3983: 1883: 1648: 487: 461: 2749:
Francalanza, Adrian; Tabone, Gerard (October 2023). "ElixirST: A session-based type system for Elixir modules".
4201: 4166: 4133: 3783: 3733: 3697: 984: 483: 3998: 4103: 4075: 4013: 3978: 3914: 3356: 1758: 1616: 1103: 1941:
Some suggest that design patterns may be a sign that features are missing in a given programming language (
4080: 4008: 3958: 3793: 3397: 3002: 2341: 2216: 2048: 1545: 1471: 1309: 491: 196: 127: 58: 4359: 4262: 4108: 4088: 4033: 3042: 2023: 1527: 1329: 1048:
Twin allows modeling of multiple inheritance in programming languages that do not support this feature.
131: 1957:
book (which is primarily focused on C++) are simplified or eliminated (via direct language support) in
1723:
For each request, a server spawns a dedicated client handler to handle a request. Also referred to as
4171: 4128: 4123: 4113: 4023: 3582: 3478: 3140: 2099: 2013: 1984: 1673:
A reactor object provides an asynchronous interface to resources that must be handled synchronously.
595: 242: 111: 104: 62: 43: 31: 2346: 154:
conference that year. In the following years, Beck, Cunningham and others followed up on this work.
4211: 4196: 4191: 4048: 3933: 3879: 3045:; Ishikawa, Sara; Silverstein, Murray; Jacobson, Max; Fiksdahl-King, Ingrid; Angel, Shlomo (1977). 3007: 2221: 1887: 1183: 637: 600:
A class accepts the objects it requires from an injector instead of creating the objects directly.
2785: 1778:
because the programmer assesses that a given variable is never going to be concurrently accessed.
4333: 4312: 4221: 4118: 3968: 3861: 3813: 3775: 3473:
Remoting Patterns: Foundations of Enterprise, Internet and Realtime Distributed Object Middleware
3343: 3020: 2814: 2796: 2766: 2367: 2226: 2033: 1621:
One thread puts a "lock" on a resource, preventing other threads from accessing or modifying it.
1584: 884: 770: 512: 508: 504: 286: 135: 66: 2679:
Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects
735:
Ensure that resources are properly released by tying them to the lifespan of suitable objects.
291:
Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects
4003: 3846: 3836: 3831: 3803: 3798: 3707: 3682: 3656: 3635: 3612: 3586: 3561: 3538: 3508: 3482: 3455: 3432: 3407: 3360: 3329: 3298: 3294: 3271: 3245: 3219: 3200: 3170: 3144: 3101: 3075: 3052: 2961: 2904: 2718: 2682: 2640: 2607: 2573: 2542: 2502: 2359: 2286: 2068: 1704: 1632: 1290: 1208: 1107: 973: 939: 865: 846: 749: 709: 394: 372: 368: 345: 320: 294: 272: 250: 228: 220: 206: 77: 2985: 2636: 2628: 2408:
Design Principles and Patterns for Computer Systems That Are Simultaneously Secure and Usable
4302: 4043: 3988: 3909: 3899: 3889: 3884: 3600: 3370: 3119: 3012: 2957: 2896: 2847: 2758: 2498: 2351: 2278: 2143: 2089: 1654: 1375: 1286: 1225: 1202: 1164: 958: 553: 158: 147: 89: 39: 2307: 1637:
Allows the interchange of information (i.e. messages) between components and applications.
4292: 4238: 4216: 3993: 3948: 3919: 3894: 3874: 3821: 3788: 3764: 2888: 2494: 2484: 2385:
Dougherty, Chad; Sayre, Kirk; Seacord, Robert C.; Svoboda, David; Togashi, Kazuya (2009).
2329: 2173: 1841: 1684: 1668: 1485: 1414: 1394: 1339: 1248: 1144: 1079: 806: 787: 688: 576: 534: 479: 162: 143: 100: 2660: 832:
Decouple an abstraction from its implementation allowing the two to vary independently.
17: 4277: 4138: 3841: 3826: 3703: 3678: 3670: 3628: 3608: 3557: 3534: 3522: 3471: 3428: 3424:
Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
3403: 3393: 3325: 3267: 3241: 3196: 3188: 3166: 3123: 3097: 2981: 2603: 2538: 2094: 2038: 1980: 1908:
A description of the results, side effects, and trade offs caused by using the pattern.
1896:
A listing of the classes and objects used in the pattern and their roles in the design.
1836: 1657:, thus preventing multiple objects from erroneously trying to use it at the same time. 1573:
Addresses problems with the asynchronous pattern that occur in multithreaded programs.
1517: 1335: 1231: 1005: 920: 827: 668:
Ensure a class has only named instances, and provide a global point of access to them.
614: 511:
organize classes and objects to form larger structures that provide new functionality.
503:
Design patterns can be organized into groups based on what kind of problem they solve.
457: 341: 337:
Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
316: 202: 192: 3652:
Design Patterns Explained, Second Edition: A New Perspective on Object-Oriented Design
1902:
A description of how classes and objects used in the pattern interact with each other.
4374: 4098: 3943: 3904: 3851: 3576: 3504: 3071: 2993: 2770: 2569: 2488: 2208: 1852:
A descriptive and unique name that helps in identifying and referring to the pattern.
1690: 1461: 1356: 1087: 1024: 795: 644: 542: 421: 146:
began experimenting with the idea of applying patterns to programming – specifically
96: 3024: 2371: 1990:
In order to achieve flexibility, design patterns may introduce additional levels of
1914:
A description of an implementation of the pattern; the solution part of the pattern.
1230:
Define an object that encapsulates how a set of objects interact. Mediator promotes
428: 4354: 4317: 4206: 4181: 3973: 3531:
Program Development in Java: Abstraction, Specification, and Object-Oriented Design
3496: 3385: 3317: 3286: 3214:
Eloranta, Veli-Pekka; Koskinen, Johannes; Leppänen, Marko; Reijonen, Ville (2014).
2950: 2867: 2800: 2245: 2063: 2018: 1950: 1870:
A scenario consisting of a problem and a context in which this pattern can be used.
1828: 1600: 1553: 1043: 998: 386: 360: 184: 2230: 2215:: École Nationale Supérieure des Techniques Industrielles et des Mines de Nantes. 754:
Ensure a class has only one instance, and provide a global point of access to it.
3650: 4307: 4282: 4267: 4186: 4018: 3526: 3381: 3184: 3158: 2762: 2468: 2109: 1991: 1824: 1744: 1738: 1267: 692: 682: 180: 47: 2822: 1029:
Provide a surrogate or placeholder for another object to control access to it.
2386: 2282: 2246:"C# 3.0 Design Patterns: Use the Power of C# 3.0 to Solve Real-World Problems" 1490:
Only execute an action on an object when the object is in a particular state.
81: 4287: 3115: 3089: 2677:
Schmidt, Douglas C.; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000).
2169: 2154: 464:, secure design, "secure usability", Web design and business model design. 264: 139: 115: 38:
describes a relatively small, well-defined aspect (i.e. functionality) of a
3725: 2701: 2363: 2207:
Baroni, Aline Lúcia; Guéhéneuc, Yann-Gaël; Albin-Amiot, Hervé (June 2003).
562:
of related or dependent objects without specifying their concrete classes.
471:
Conference proceedings include many examples of domain-specific patterns.
2900: 2355: 424:
in a format that does not require specifics tied to a particular problem.
2952:
Code Complete: A Practical Handbook of Software Construction, 2nd Edition
2871: 2597: 2532: 2467:
Pattern Languages of Programming, Conference proceedings (annual, 1994—)
1920:
An illustration of how the pattern can be used in a programming language.
1858:
A description of the goal behind the pattern and the reason for using it.
663: 85: 3128:
Proceedings of the 18th International Conference on Software Engineering
3016: 2426: 2147: 1876:
Situations in which this pattern is usable; the context for the pattern.
3626:
Mattson, Timothy G.; Sanders, Beverly A.; Massingill, Berna L. (2005).
976: 656: 54: 2928: 482:
design patterns typically show relationships and interactions between
247:
Pattern-Oriented Software Architecture, Volume 1: A System of Patterns
27:
Reusable design for writing code that provides a well-defined function
3717: 3451: 2737: 2212: 2183: 2139: 1976:
Inappropriate use of patterns may unnecessarily increase complexity.
944:
Use sharing to support large numbers of similar objects efficiently.
151: 1211:
object sequentially without exposing its underlying representation.
906:
Adding functionality to a hierarchy without changing the hierarchy.
515:
provide communication between objects and realizing these patterns.
110:
Conceptually, design pattern may be described as more specific than
1946: 103:. Some consider using design patterns as a structured approach to 3216:
Designing Distributed Control Systems: A Pattern Language Approach
2563: 2177: 1709:
Explicitly control when threads may execute single-threaded code.
2271:"Formal Modeling and Specification of Design Patterns Using RTPA" 2406: 225:
Studies in Computational Science: Parallel Programming Paradigms
3729: 3699:
Small Memory Software: Patterns for systems with limited memory
3399:
Design Patterns: Elements of Reusable Object-Oriented Software
1523: 198:
Design Patterns: Elements of Reusable Object-Oriented Software
164:
Design Patterns: Elements of Reusable Object-Oriented Software
2891:(2002). "Design pattern implementation in Java and AspectJ". 3578:
EJB Design Patterns: Advanced Patterns, Processes and Idioms
2661:"Twin – A Design Pattern for Modeling Multiple Inheritance" 2157:
has significantly aided their software development efforts.
245:; Meunier, Regine; Rohnert, Hans; Sommerlad, Peter (1996). 3552:
Manolescu, Dragos; Voelter, Markus; Noble, James (2006).
1994:, which may complicate the resulting design and decrease 1819:
used by different pattern authors. However, according to
289:; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000). 3068:
Core J2EE Patterns: Best Practices and Design Strategies
2784:
Schmidt, Douglas C.; Vinoski, Steve (July–August 1996).
2565:
Core J2EE Patterns: Best Practices and Design Strategies
2334:
IEEE Transactions on Visualization and Computer Graphics
2330:"Software Design Patterns for Information Visualization" 2188:
Specification and Design for Object-Oriented Programming
3349:
Patterns of Software: Tales From The Software Community
2751:
Journal of Logical and Algebraic Methods in Programming
2448:"How to design your Business Model as a Lean Startup?" 1272:
Avoid null references by providing a default object.
1106:
pattern for combining disparate sources of data (see
427:
In 1996, Christopher Alexander was invited to give a
3469:
Kircher, Michael; Völter, Markus; Zdun, Uwe (2005).
989:
Empty interface to associate metadata with a class.
53:
Using a pattern is intended to leverage an existing
4347: 4326: 4255: 4230: 4147: 4032: 3932: 3860: 3812: 3774: 3763: 2310:. University of Helsinki, Dept. of Computer Science 2179:
Using Pattern Languages for Object-Oriented Program
1953:demonstrates that 16 out of the 23 patterns in the 3627: 3470: 3066:Alur, Deepak; Crupi, John; Malks, Dan (May 2003). 3048:A Pattern Language: Towns, Buildings, Construction 2949: 359:Freeman, Eric T.; Robson, Elisabeth; Bates, Bert; 2629:"Item 37: Use marker interfaces to define types" 2479: 2477: 2475: 171:Conference was held, and the following year the 3264:Patterns of Enterprise Application Architecture 2599:Patterns of Enterprise Application Architecture 2534:Patterns of Enterprise Application Architecture 391:Applying UML and Patterns (3rd Ed, 1st Ed 1995) 313:Patterns of Enterprise Application Architecture 2562:Alur, Deepak; Crupi, John; Malks, Dan (2003). 2308:"Collection of User Interface Design Patterns" 3741: 1763:Static or "global" memory local to a thread. 8: 2635:(Second ed.). Addison-Wesley. p.  1882:A graphical representation of the pattern. 1207:Provide a way to access the elements of an 3771: 3748: 3734: 3726: 1774:Safe Concurrency with Exclusive Ownership 3675:Pattern Hatching: Design Patterns Applied 3649:Shalloway, Alan; Trott, James R. (2001). 3603:; Riehle, Dirk; Buschmann, Frank (1997). 3238:Analysis Patterns: Reusable Object Models 3006: 2345: 2220: 2080:List of software development philosophies 3137:A Pattern Approach to Interaction Design 2523: 2521: 1438: 1067: 775: 522: 2986:"Componentization: The Visitor Example" 2487:(June 2004). "Design in Construction". 2126: 1926:Examples of real usages of the pattern. 1653:An object whose methods are subject to 1845:. It contains the following sections: 730:Resource acquisition is initialization 3605:Pattern Languages of Program Design 3 3554:Pattern Languages of Program Design 5 3193:Pattern Languages of Program Design 2 3051:. New York: Oxford University Press. 157:Design patterns gained popularity in 150:– and presented their results at the 7: 3696:Weir, Charles; Noble, James (2000). 3421:Hohpe, Gregor; Woolf, Bobby (2003). 2873:Design Patterns in Dynamic Languages 1967:aspect-oriented programming language 334:Hohpe, Gregor; Woolf, Bobby (2003). 80:. Most development resources that a 3285:Freeman, Eric; Freeman, Elisabeth; 3163:Pattern Languages of Program Design 2085:List of software engineering topics 1793:concurrency patterns as above. The 619:Define an interface for creating a 95:Some consider using patterns to be 2269:Tiako, Pierre F. (31 March 2009). 1693:mechanism may or may not be used. 558:Provide an interface for creating 88:to use an artifact; for example a 61:it. This can decrease the time to 25: 3630:Patterns for Parallel Programming 2513:Table 5.1 Popular Design Patterns 2394:. Software Engineering Institute. 2142:'87 Addendum to the Proceedings. 2054:Enterprise Architecture framework 2211:(Report). EMN Technical Report. 2115:Software development methodology 1850:Pattern Name and Classification: 469:Pattern Languages of Programming 269:Smalltalk Best Practice Patterns 169:Pattern Languages of Programming 4246:Enterprise Integration Patterns 2423:"Yahoo! Design Pattern Library" 2328:Heer, J.; Agrawala, M. (2006). 446:prototypical micro-architecture 3161:; Schmidt, Douglas C. (1995). 3122:; Dominick, L.; Paulisch, F.; 2984:; Arnout, Karine (July 2006). 2306:Laakso, Sari A. (2003-09-16). 2248:. C# Books from O'Reilly Media 2059:GRASP (object-oriented design) 1973:essay "Revenge of the Nerds". 1801:class for these capabilities. 1633:Messaging design pattern (MDP) 1468:asynchronous method invocation 1: 3118:; Crocker, R.; Meszaros, G.; 2956:. Pearson Education. p.  2405:Garfinkel, Simson L. (2005). 2209:Design Patterns Formalization 1890:may be used for this purpose. 84:uses involve configuring the 3322:Beyond Software Architecture 2273:. In Tiako, Pierre F (ed.). 2134:Smith, Reid (October 1987). 1864:Other names for the pattern. 1532:Convolutional neural network 4339:Portland Pattern Repository 3191:; Kerth, Norman L. (1996). 2895:. OOPSLA '02. p. 161. 2848:"Writing Software Patterns" 2763:10.1016/j.jlamp.2023.100891 2717:. Wiley. pp. 570–571. 2136:Panel on design methodology 2105:Portland Pattern Repository 2044:Distributed design patterns 475:Object-oriented programming 173:Portland Pattern Repository 4402: 3291:Head First Design Patterns 2075:Interaction design pattern 2029:Canonical protocol pattern 365:Head First Design Patterns 126:Patterns originated as an 69:of the resulting program. 3575:Marinescu, Floyd (2002). 3501:Applying UML and Patterns 2948:McConnell, Steve (2004). 2681:. John Wiley & Sons. 2283:10.4018/978-1-60566-060-8 2233:– via ResearchGate. 809:, Wrapper, or Translator 462:information visualization 293:. John Wiley & Sons. 249:. John Wiley & Sons. 4381:Software design patterns 3964:Event-based asynchronous 3757:Software design patterns 1720:Service handler pattern 1569:Event-based asynchronous 452:Domain-specific patterns 72:Notably, a pattern does 18:Software design patterns 3870:Chain of responsibility 3357:Oxford University Press 3094:Implementation Patterns 1759:Thread-specific storage 1474:for handling requests. 1125:Chain of responsibility 1104:Artificial intelligence 114:and less specific than 4009:Scheduled-task pattern 3959:Double-checked locking 3289:; Bates, Bert (2004). 3135:Borchers, Jan (2001). 3043:Alexander, Christopher 2929:"Revenge of the Nerds" 2819:"A Pattern Definition" 2627:Bloch, Joshua (2008). 2388:Secure Design Patterns 2049:Double-chance function 1546:Double-checked locking 492:functional programming 440:A pattern describes a 4360:Architectural pattern 4263:Christopher Alexander 3583:John Wiley & Sons 3479:John Wiley & Sons 3446:Holub, Allen (2004). 3141:John Wiley & Sons 2901:10.1145/582419.582436 2356:10.1109/TVCG.2006.178 2024:Architectural pattern 2009:Abstraction principle 1789:CPU atomic operation 1528:Matrix multiplication 132:Christopher Alexander 128:architectural concept 4386:Software development 4172:Dependency injection 4129:Inversion of control 4124:Data transfer object 4024:Thread-local storage 3601:Martin, Robert Cecil 2715:Professional C# 2008 2100:Pedagogical patterns 2014:Algorithmic skeleton 1888:Interaction diagrams 1868:Motivation (Forces): 1435:Concurrency patterns 596:Dependency Injection 134:as early as 1977 in 112:programming paradigm 105:computer programming 32:software engineering 4177:Intercepting filter 3017:10.1109/MC.2006.227 2148:10.1145/62138.62151 1064:Behavioral patterns 771:Structural patterns 638:Lazy initialization 519:Creational patterns 513:Behavioral patterns 509:Structural patterns 505:Creational patterns 287:Schmidt, Douglas C. 42:in terms of how to 4334:The Hillside Group 4119:Data access object 3969:Guarded suspension 3954:Binding properties 3671:Vlissides, John M. 3655:. Addison-Wesley. 3634:. Addison-Wesley. 3189:Vlissides, John M. 2702:Binding Properties 2176:(September 1987). 2034:Debugging patterns 1797:language uses the 1725:thread-per-session 1585:Guarded suspension 1502:Binding properties 221:Brinch Hansen, Per 136:A Pattern Language 4368: 4367: 4162:Business delegate 4094:Publish–subscribe 3928: 3927: 3713:978-0-201-59607-6 3688:978-0-201-43293-0 3662:978-0-321-24714-8 3641:978-0-321-22811-6 3618:978-0-201-31011-5 3592:978-0-471-20831-0 3567:978-0-321-32194-7 3544:978-0-201-65768-5 3514:978-0-13-148906-6 3488:978-0-470-85662-8 3461:978-1-59059-388-2 3448:Holub on Patterns 3438:978-0-321-20068-6 3413:978-0-201-63361-0 3366:978-0-19-512123-0 3335:978-0-201-77594-5 3304:978-0-596-00712-6 3277:978-0-321-12742-6 3251:978-0-201-89542-1 3206:978-0-201-89527-8 3185:Coplien, James O. 3176:978-0-201-60734-5 3159:Coplien, James O. 3150:978-0-471-49828-5 3130:. pp. 25–30. 3107:978-0-321-41309-3 3081:978-0-13-142246-9 3058:978-0-19-501919-3 2724:978-0-470-19137-8 2688:978-0-471-60695-6 2646:978-0-321-35668-0 2613:978-0-321-12742-6 2579:978-0-13-142246-9 2548:978-0-321-12742-6 2508:978-0-7356-1967-8 1930:Related Patterns: 1811: 1810: 1432: 1431: 1291:Publish/subscribe 1108:blackboard system 1061: 1060: 903:Extension object 767: 766: 460:design patterns, 378:978-0-596-00712-6 351:978-0-321-20068-6 326:978-0-321-12742-6 300:978-0-471-60695-6 271:. Prentice Hall. 256:978-0-471-95869-7 234:978-0-13-439324-7 227:. Prentice Hall. 212:978-0-201-63361-0 148:pattern languages 78:software artifact 65:and increase the 16:(Redirected from 4393: 4167:Composite entity 4044:Front controller 3784:Abstract factory 3772: 3750: 3743: 3736: 3727: 3721: 3716:. Archived from 3692: 3666: 3645: 3633: 3622: 3596: 3571: 3548: 3518: 3492: 3476: 3465: 3442: 3417: 3377: 3375: 3369:. Archived from 3354: 3344:Gabriel, Richard 3339: 3308: 3281: 3255: 3229: 3210: 3180: 3154: 3131: 3111: 3092:(October 2007). 3085: 3070:(2nd ed.). 3062: 3029: 3028: 3010: 2990: 2978: 2972: 2971: 2955: 2945: 2939: 2938: 2936: 2935: 2921: 2915: 2914: 2889:Kiczales, Gregor 2887:Hannemann, Jan; 2884: 2878: 2877: 2864: 2858: 2857: 2855: 2854: 2840: 2834: 2833: 2831: 2830: 2821:. Archived from 2811: 2805: 2804: 2790: 2781: 2775: 2774: 2746: 2740: 2735: 2729: 2728: 2710: 2704: 2699: 2693: 2692: 2674: 2668: 2667: 2665: 2657: 2651: 2650: 2624: 2618: 2617: 2590: 2584: 2583: 2559: 2553: 2552: 2525: 2516: 2515: 2493:(2nd ed.). 2485:McConnell, Steve 2481: 2470: 2465: 2459: 2458: 2456: 2455: 2444: 2438: 2437: 2435: 2434: 2425:. Archived from 2419: 2413: 2412: 2402: 2396: 2395: 2393: 2382: 2376: 2375: 2349: 2325: 2319: 2318: 2316: 2315: 2303: 2297: 2296: 2266: 2260: 2259: 2254: 2253: 2244:Bishop, Judith. 2241: 2235: 2234: 2224: 2204: 2198: 2197: 2195: 2194: 2186:'87 workshop on 2174:Cunningham, Ward 2166: 2160: 2159: 2131: 2090:Pattern language 1655:mutual exclusion 1439: 1165:Fluent interface 1068: 978: 975: 959:Front controller 776: 658: 554:Abstract factory 523: 507:create objects. 404: 382: 355: 330: 304: 282: 260: 243:Buschmann, Frank 238: 216: 159:computer science 63:develop software 40:computer program 21: 4401: 4400: 4396: 4395: 4394: 4392: 4391: 4390: 4371: 4370: 4369: 4364: 4343: 4322: 4313:Douglas Schmidt 4293:Ward Cunningham 4251: 4239:Design Patterns 4226: 4217:Method chaining 4149: 4143: 4104:Service locator 4035: 4028: 3999:Read–write lock 3935: 3924: 3915:Template method 3856: 3808: 3766: 3759: 3754: 3724: 3714: 3695: 3689: 3669: 3663: 3648: 3642: 3625: 3619: 3599: 3593: 3574: 3568: 3551: 3545: 3523:Liskov, Barbara 3521: 3515: 3495: 3489: 3468: 3462: 3445: 3439: 3420: 3414: 3394:Vlissides, John 3380: 3373: 3367: 3359:. p. 235. 3352: 3342: 3336: 3312:Hohmann, Luke; 3311: 3305: 3284: 3278: 3258: 3252: 3232: 3226: 3213: 3207: 3183: 3177: 3157: 3151: 3134: 3114: 3108: 3088: 3082: 3065: 3059: 3041: 3037: 3035:Further reading 3032: 2988: 2982:Meyer, Bertrand 2980: 2979: 2975: 2968: 2947: 2946: 2942: 2933: 2931: 2923: 2922: 2918: 2911: 2886: 2885: 2881: 2866: 2865: 2861: 2852: 2850: 2842: 2841: 2837: 2828: 2826: 2813: 2812: 2808: 2793:SIGS C++ Report 2788: 2783: 2782: 2778: 2748: 2747: 2743: 2736: 2732: 2725: 2712: 2711: 2707: 2700: 2696: 2689: 2676: 2675: 2671: 2663: 2659: 2658: 2654: 2647: 2626: 2625: 2621: 2614: 2606:. p. 344. 2592: 2591: 2587: 2580: 2572:. p. 166. 2561: 2560: 2556: 2549: 2527: 2526: 2519: 2509: 2495:Microsoft Press 2483: 2482: 2473: 2466: 2462: 2453: 2451: 2446: 2445: 2441: 2432: 2430: 2421: 2420: 2416: 2411:(Ph.D. thesis). 2404: 2403: 2399: 2391: 2384: 2383: 2379: 2347:10.1.1.121.4534 2327: 2326: 2322: 2313: 2311: 2305: 2304: 2300: 2293: 2277:. p. 636. 2268: 2267: 2263: 2251: 2249: 2243: 2242: 2238: 2206: 2205: 2201: 2192: 2190: 2168: 2167: 2163: 2133: 2132: 2128: 2124: 2119: 2004: 1983:as provided by 1955:Design Patterns 1949:for instance). 1939: 1912:Implementation: 1842:Design Patterns 1816: 1685:Read-write lock 1437: 1395:Template method 1080:Design Patterns 1066: 788:Design Patterns 774: 689:connection pool 535:Design Patterns 521: 501: 480:Object-oriented 477: 454: 438: 414: 401: 385: 379: 358: 352: 333: 327: 307: 301: 285: 279: 263: 257: 241: 235: 219: 213: 193:Vlissides, John 179: 161:after the book 144:Ward Cunningham 124: 101:software design 28: 23: 22: 15: 12: 11: 5: 4399: 4397: 4389: 4388: 4383: 4373: 4372: 4366: 4365: 4363: 4362: 4357: 4351: 4349: 4345: 4344: 4342: 4341: 4336: 4330: 4328: 4324: 4323: 4321: 4320: 4315: 4310: 4305: 4300: 4295: 4290: 4285: 4280: 4278:John Vlissides 4275: 4270: 4265: 4259: 4257: 4253: 4252: 4250: 4249: 4242: 4234: 4232: 4228: 4227: 4225: 4224: 4219: 4214: 4209: 4204: 4199: 4194: 4189: 4184: 4179: 4174: 4169: 4164: 4159: 4153: 4151: 4145: 4144: 4142: 4141: 4136: 4131: 4126: 4121: 4116: 4111: 4106: 4101: 4096: 4091: 4086: 4078: 4073: 4068: 4067: 4066: 4061: 4051: 4046: 4040: 4038: 4030: 4029: 4027: 4026: 4021: 4016: 4011: 4006: 4001: 3996: 3991: 3986: 3981: 3976: 3971: 3966: 3961: 3956: 3951: 3946: 3940: 3938: 3930: 3929: 3926: 3925: 3923: 3922: 3917: 3912: 3907: 3902: 3897: 3892: 3887: 3882: 3877: 3872: 3866: 3864: 3858: 3857: 3855: 3854: 3849: 3844: 3839: 3834: 3829: 3824: 3818: 3816: 3810: 3809: 3807: 3806: 3801: 3796: 3794:Factory method 3791: 3786: 3780: 3778: 3769: 3761: 3760: 3755: 3753: 3752: 3745: 3738: 3730: 3723: 3722: 3720:on 2007-06-17. 3712: 3704:Addison-Wesley 3693: 3687: 3679:Addison-Wesley 3667: 3661: 3646: 3640: 3623: 3617: 3609:Addison-Wesley 3597: 3591: 3572: 3566: 3558:Addison-Wesley 3549: 3543: 3535:Addison-Wesley 3519: 3513: 3493: 3487: 3466: 3460: 3443: 3437: 3429:Addison-Wesley 3418: 3412: 3404:Addison-Wesley 3390:Johnson, Ralph 3378: 3376:on 2003-08-01. 3365: 3340: 3334: 3326:Addison-Wesley 3314:Fowler, Martin 3309: 3303: 3295:O'Reilly Media 3282: 3276: 3268:Addison-Wesley 3260:Fowler, Martin 3256: 3250: 3242:Addison-Wesley 3234:Fowler, Martin 3230: 3225:978-1118694152 3224: 3211: 3205: 3197:Addison-Wesley 3181: 3175: 3167:Addison-Wesley 3155: 3149: 3132: 3126:(March 1996). 3120:Coplien, J. O. 3112: 3106: 3098:Addison-Wesley 3086: 3080: 3063: 3057: 3038: 3036: 3033: 3031: 3030: 3008:10.1.1.62.6082 2973: 2966: 2940: 2916: 2909: 2879: 2859: 2846:(2006-08-01). 2844:Fowler, Martin 2835: 2806: 2776: 2741: 2730: 2723: 2705: 2694: 2687: 2669: 2652: 2645: 2633:Effective Java 2619: 2612: 2604:Addison-Wesley 2594:Fowler, Martin 2585: 2578: 2554: 2547: 2539:Addison-Wesley 2529:Fowler, Martin 2517: 2507: 2471: 2460: 2439: 2414: 2397: 2377: 2320: 2298: 2291: 2261: 2236: 2222:10.1.1.62.6466 2199: 2161: 2125: 2123: 2120: 2118: 2117: 2112: 2107: 2102: 2097: 2095:Pattern theory 2092: 2087: 2082: 2077: 2072: 2071:in programming 2066: 2061: 2056: 2051: 2046: 2041: 2039:Design pattern 2036: 2031: 2026: 2021: 2016: 2011: 2005: 2003: 2000: 1981:software reuse 1938: 1935: 1934: 1933: 1927: 1921: 1915: 1909: 1903: 1900:Collaboration: 1897: 1891: 1884:Class diagrams 1877: 1874:Applicability: 1871: 1865: 1862:Also Known As: 1859: 1853: 1839:in their book 1837:John Vlissides 1815: 1812: 1809: 1808: 1805: 1802: 1790: 1786: 1785: 1782: 1779: 1775: 1771: 1770: 1767: 1764: 1761: 1755: 1754: 1751: 1748: 1741: 1735: 1734: 1731: 1728: 1721: 1717: 1716: 1713: 1710: 1707: 1701: 1700: 1697: 1694: 1687: 1681: 1680: 1677: 1674: 1671: 1665: 1664: 1661: 1658: 1651: 1649:Monitor object 1645: 1644: 1641: 1638: 1635: 1629: 1628: 1625: 1622: 1619: 1613: 1612: 1609: 1606: 1603: 1597: 1596: 1593: 1590: 1587: 1581: 1580: 1577: 1574: 1571: 1565: 1564: 1561: 1558: 1548: 1542: 1541: 1538: 1535: 1520: 1518:Compute kernel 1514: 1513: 1510: 1507: 1504: 1498: 1497: 1494: 1491: 1488: 1482: 1481: 1478: 1475: 1464: 1458: 1457: 1454: 1446: 1443: 1436: 1433: 1430: 1429: 1426: 1423: 1420: 1417: 1411: 1410: 1407: 1404: 1401: 1397: 1391: 1390: 1387: 1384: 1381: 1378: 1372: 1371: 1368: 1365: 1362: 1359: 1353: 1352: 1349: 1346: 1343: 1336:business logic 1332: 1326: 1325: 1322: 1319: 1316: 1312: 1306: 1305: 1302: 1299: 1296: 1293: 1283: 1282: 1279: 1276: 1273: 1270: 1264: 1263: 1260: 1257: 1254: 1251: 1245: 1244: 1241: 1238: 1235: 1232:loose coupling 1228: 1222: 1221: 1218: 1215: 1212: 1205: 1199: 1198: 1195: 1192: 1189: 1186: 1180: 1179: 1176: 1173: 1170: 1167: 1161: 1160: 1157: 1154: 1151: 1147: 1141: 1140: 1137: 1134: 1131: 1127: 1121: 1120: 1117: 1114: 1111: 1101: 1095: 1094: 1091: 1083: 1075: 1072: 1065: 1062: 1059: 1058: 1055: 1052: 1049: 1046: 1040: 1039: 1036: 1033: 1030: 1027: 1021: 1020: 1017: 1014: 1011: 1008: 1002: 1001: 999:Effective Java 996: 993: 990: 987: 981: 980: 970: 967: 964: 961: 955: 954: 951: 948: 945: 942: 936: 935: 932: 929: 926: 923: 917: 916: 913: 910: 907: 904: 900: 899: 896: 893: 890: 887: 881: 880: 877: 874: 871: 868: 862: 861: 858: 855: 852: 849: 843: 842: 839: 836: 833: 830: 824: 823: 820: 817: 814: 810: 803: 802: 799: 791: 783: 780: 773: 768: 765: 764: 761: 758: 755: 752: 746: 745: 742: 739: 736: 733: 726: 725: 722: 719: 716: 712: 706: 705: 702: 699: 696: 685: 679: 678: 675: 672: 669: 666: 660: 659: 654: 651: 648: 640: 634: 633: 630: 627: 624: 617: 615:Factory method 611: 610: 607: 604: 601: 598: 592: 591: 588: 585: 582: 579: 573: 572: 569: 566: 563: 556: 550: 549: 546: 538: 530: 527: 520: 517: 500: 497: 476: 473: 458:user interface 453: 450: 437: 434: 429:Keynote Speech 413: 410: 406: 405: 400:978-0131489066 399: 383: 377: 369:O'Reilly Media 356: 350: 342:Addison-Wesley 331: 325: 317:Addison-Wesley 309:Fowler, Martin 305: 299: 283: 278:978-0134769042 277: 261: 255: 239: 233: 217: 211: 203:Addison-Wesley 189:Johnson, Ralph 123: 120: 36:design pattern 26: 24: 14: 13: 10: 9: 6: 4: 3: 2: 4398: 4387: 4384: 4382: 4379: 4378: 4376: 4361: 4358: 4356: 4353: 4352: 4350: 4346: 4340: 4337: 4335: 4332: 4331: 4329: 4325: 4319: 4316: 4314: 4311: 4309: 4306: 4304: 4303:Robert Martin 4301: 4299: 4298:Martin Fowler 4296: 4294: 4291: 4289: 4286: 4284: 4281: 4279: 4276: 4274: 4273:Ralph Johnson 4271: 4269: 4266: 4264: 4261: 4260: 4258: 4254: 4248: 4247: 4243: 4241: 4240: 4236: 4235: 4233: 4229: 4223: 4220: 4218: 4215: 4213: 4210: 4208: 4205: 4203: 4200: 4198: 4195: 4193: 4190: 4188: 4185: 4183: 4180: 4178: 4175: 4173: 4170: 4168: 4165: 4163: 4160: 4158: 4155: 4154: 4152: 4146: 4140: 4137: 4135: 4132: 4130: 4127: 4125: 4122: 4120: 4117: 4115: 4112: 4110: 4109:Active record 4107: 4105: 4102: 4100: 4099:Naked objects 4097: 4095: 4092: 4090: 4089:Specification 4087: 4085: 4083: 4079: 4077: 4074: 4072: 4069: 4065: 4062: 4060: 4057: 4056: 4055: 4052: 4050: 4047: 4045: 4042: 4041: 4039: 4037: 4034:Architectural 4031: 4025: 4022: 4020: 4017: 4015: 4012: 4010: 4007: 4005: 4002: 4000: 3997: 3995: 3992: 3990: 3987: 3985: 3982: 3980: 3977: 3975: 3972: 3970: 3967: 3965: 3962: 3960: 3957: 3955: 3952: 3950: 3947: 3945: 3944:Active object 3942: 3941: 3939: 3937: 3931: 3921: 3918: 3916: 3913: 3911: 3908: 3906: 3903: 3901: 3898: 3896: 3893: 3891: 3888: 3886: 3883: 3881: 3878: 3876: 3873: 3871: 3868: 3867: 3865: 3863: 3859: 3853: 3850: 3848: 3845: 3843: 3840: 3838: 3835: 3833: 3830: 3828: 3825: 3823: 3820: 3819: 3817: 3815: 3811: 3805: 3802: 3800: 3797: 3795: 3792: 3790: 3787: 3785: 3782: 3781: 3779: 3777: 3773: 3770: 3768: 3762: 3758: 3751: 3746: 3744: 3739: 3737: 3732: 3731: 3728: 3719: 3715: 3709: 3705: 3701: 3700: 3694: 3690: 3684: 3680: 3676: 3672: 3668: 3664: 3658: 3654: 3653: 3647: 3643: 3637: 3632: 3631: 3624: 3620: 3614: 3610: 3606: 3602: 3598: 3594: 3588: 3584: 3580: 3579: 3573: 3569: 3563: 3559: 3555: 3550: 3546: 3540: 3536: 3532: 3528: 3524: 3520: 3516: 3510: 3506: 3505:Prentice Hall 3502: 3498: 3497:Larman, Craig 3494: 3490: 3484: 3480: 3475: 3474: 3467: 3463: 3457: 3453: 3449: 3444: 3440: 3434: 3430: 3426: 3425: 3419: 3415: 3409: 3405: 3401: 3400: 3395: 3391: 3387: 3386:Helm, Richard 3383: 3379: 3372: 3368: 3362: 3358: 3351: 3350: 3345: 3341: 3337: 3331: 3327: 3323: 3319: 3318:Kawasaki, Guy 3315: 3310: 3306: 3300: 3296: 3292: 3288: 3287:Sierra, Kathy 3283: 3279: 3273: 3269: 3265: 3261: 3257: 3253: 3247: 3243: 3239: 3235: 3231: 3227: 3221: 3217: 3212: 3208: 3202: 3198: 3194: 3190: 3186: 3182: 3178: 3172: 3168: 3164: 3160: 3156: 3152: 3146: 3142: 3138: 3133: 3129: 3125: 3124:Vlissides, J. 3121: 3117: 3113: 3109: 3103: 3099: 3095: 3091: 3087: 3083: 3077: 3073: 3072:Prentice Hall 3069: 3064: 3060: 3054: 3050: 3049: 3044: 3040: 3039: 3034: 3026: 3022: 3018: 3014: 3009: 3004: 3000: 2996: 2995: 2994:IEEE Computer 2987: 2983: 2977: 2974: 2969: 2967:9780735619678 2963: 2959: 2954: 2953: 2944: 2941: 2930: 2926: 2920: 2917: 2912: 2906: 2902: 2898: 2894: 2890: 2883: 2880: 2875: 2874: 2869: 2868:Norvig, Peter 2863: 2860: 2849: 2845: 2839: 2836: 2825:on 2007-02-09 2824: 2820: 2816: 2815:Gabriel, Dick 2810: 2807: 2802: 2798: 2794: 2787: 2780: 2777: 2772: 2768: 2764: 2760: 2756: 2752: 2745: 2742: 2739: 2734: 2731: 2726: 2720: 2716: 2709: 2706: 2703: 2698: 2695: 2690: 2684: 2680: 2673: 2670: 2662: 2656: 2653: 2648: 2642: 2638: 2634: 2630: 2623: 2620: 2615: 2609: 2605: 2601: 2600: 2595: 2589: 2586: 2581: 2575: 2571: 2570:Prentice Hall 2567: 2566: 2558: 2555: 2550: 2544: 2540: 2536: 2535: 2530: 2524: 2522: 2518: 2514: 2510: 2504: 2500: 2496: 2492: 2491: 2490:Code Complete 2486: 2480: 2478: 2476: 2472: 2469: 2464: 2461: 2449: 2443: 2440: 2429:on 2008-02-29 2428: 2424: 2418: 2415: 2410: 2409: 2401: 2398: 2390: 2389: 2381: 2378: 2373: 2369: 2365: 2361: 2357: 2353: 2348: 2343: 2340:(5): 853–60. 2339: 2335: 2331: 2324: 2321: 2309: 2302: 2299: 2294: 2292:9781605660615 2288: 2284: 2280: 2276: 2272: 2265: 2262: 2258: 2247: 2240: 2237: 2232: 2228: 2223: 2218: 2214: 2210: 2203: 2200: 2189: 2185: 2181: 2180: 2175: 2171: 2165: 2162: 2158: 2156: 2149: 2145: 2141: 2137: 2130: 2127: 2121: 2116: 2113: 2111: 2108: 2106: 2103: 2101: 2098: 2096: 2093: 2091: 2088: 2086: 2083: 2081: 2078: 2076: 2073: 2070: 2067: 2065: 2062: 2060: 2057: 2055: 2052: 2050: 2047: 2045: 2042: 2040: 2037: 2035: 2032: 2030: 2027: 2025: 2022: 2020: 2017: 2015: 2012: 2010: 2007: 2006: 2001: 1999: 1998:performance. 1997: 1993: 1988: 1986: 1982: 1977: 1974: 1972: 1971:Paul Graham's 1968: 1964: 1960: 1956: 1952: 1948: 1944: 1936: 1931: 1928: 1925: 1922: 1919: 1916: 1913: 1910: 1907: 1906:Consequences: 1904: 1901: 1898: 1895: 1894:Participants: 1892: 1889: 1885: 1881: 1878: 1875: 1872: 1869: 1866: 1863: 1860: 1857: 1854: 1851: 1848: 1847: 1846: 1844: 1843: 1838: 1834: 1833:Ralph Johnson 1830: 1826: 1822: 1821:Martin Fowler 1814:Documentation 1813: 1806: 1803: 1800: 1796: 1791: 1788: 1787: 1783: 1780: 1776: 1773: 1772: 1768: 1765: 1762: 1760: 1757: 1756: 1752: 1749: 1746: 1742: 1740: 1737: 1736: 1732: 1729: 1726: 1722: 1719: 1718: 1714: 1711: 1708: 1706: 1703: 1702: 1698: 1695: 1692: 1691:Copy-on-write 1688: 1686: 1683: 1682: 1678: 1675: 1672: 1670: 1667: 1666: 1662: 1659: 1656: 1652: 1650: 1647: 1646: 1642: 1639: 1636: 1634: 1631: 1630: 1626: 1623: 1620: 1618: 1615: 1614: 1610: 1607: 1604: 1602: 1599: 1598: 1594: 1591: 1588: 1586: 1583: 1582: 1578: 1575: 1572: 1570: 1567: 1566: 1562: 1559: 1557: 1555: 1549: 1547: 1544: 1543: 1539: 1536: 1533: 1529: 1525: 1521: 1519: 1516: 1515: 1511: 1508: 1505: 1503: 1500: 1499: 1495: 1492: 1489: 1487: 1484: 1483: 1479: 1476: 1473: 1469: 1465: 1463: 1462:Active Object 1460: 1459: 1455: 1453: 1452: 1447: 1444: 1441: 1440: 1434: 1427: 1424: 1421: 1418: 1416: 1413: 1412: 1408: 1405: 1402: 1398: 1396: 1393: 1392: 1388: 1385: 1382: 1379: 1377: 1374: 1373: 1369: 1366: 1363: 1360: 1358: 1355: 1354: 1350: 1347: 1344: 1341: 1337: 1334:Recombinable 1333: 1331: 1330:Specification 1328: 1327: 1323: 1320: 1317: 1313: 1311: 1308: 1307: 1303: 1300: 1297: 1294: 1292: 1288: 1285: 1284: 1280: 1277: 1274: 1271: 1269: 1266: 1265: 1261: 1258: 1255: 1252: 1250: 1247: 1246: 1242: 1239: 1236: 1233: 1229: 1227: 1224: 1223: 1219: 1216: 1213: 1210: 1206: 1204: 1201: 1200: 1196: 1193: 1190: 1187: 1185: 1182: 1181: 1177: 1174: 1171: 1168: 1166: 1163: 1162: 1158: 1155: 1152: 1148: 1146: 1143: 1142: 1138: 1135: 1132: 1128: 1126: 1123: 1122: 1118: 1115: 1112: 1109: 1105: 1102: 1100: 1097: 1096: 1092: 1090: 1089: 1088:Code Complete 1084: 1082: 1081: 1076: 1073: 1070: 1069: 1063: 1056: 1053: 1050: 1047: 1045: 1042: 1041: 1037: 1034: 1031: 1028: 1026: 1023: 1022: 1018: 1015: 1012: 1009: 1007: 1004: 1003: 1000: 997: 994: 991: 988: 986: 983: 982: 979: 974:J2EE Patterns 971: 968: 965: 962: 960: 957: 956: 952: 949: 946: 943: 941: 938: 937: 933: 930: 927: 924: 922: 919: 918: 914: 911: 908: 905: 902: 901: 897: 894: 891: 888: 886: 883: 882: 878: 875: 872: 869: 867: 864: 863: 859: 856: 853: 850: 848: 845: 844: 840: 837: 834: 831: 829: 826: 825: 821: 818: 815: 811: 808: 805: 804: 800: 798: 797: 796:Code Complete 792: 790: 789: 784: 781: 778: 777: 772: 769: 762: 759: 756: 753: 751: 748: 747: 743: 740: 737: 734: 731: 728: 727: 723: 720: 717: 713: 711: 708: 707: 703: 700: 697: 694: 690: 686: 684: 681: 680: 676: 673: 670: 667: 665: 662: 661: 655: 652: 649: 646: 641: 639: 636: 635: 631: 628: 625: 622: 618: 616: 613: 612: 608: 605: 602: 599: 597: 594: 593: 589: 586: 583: 580: 578: 575: 574: 570: 567: 564: 561: 557: 555: 552: 551: 547: 545: 544: 543:Code Complete 539: 537: 536: 531: 528: 525: 524: 518: 516: 514: 510: 506: 498: 496: 493: 489: 485: 481: 474: 472: 470: 465: 463: 459: 451: 449: 447: 443: 435: 433: 430: 425: 423: 418: 411: 409: 402: 396: 392: 388: 387:Larman, Craig 384: 380: 374: 370: 366: 362: 361:Sierra, Kathy 357: 353: 347: 343: 339: 338: 332: 328: 322: 318: 314: 310: 306: 302: 296: 292: 288: 284: 280: 274: 270: 266: 262: 258: 252: 248: 244: 240: 236: 230: 226: 222: 218: 214: 208: 204: 200: 199: 194: 190: 186: 185:Helm, Richard 182: 178: 177: 176: 174: 170: 166: 165: 160: 155: 153: 149: 145: 141: 137: 133: 129: 121: 119: 117: 113: 108: 106: 102: 98: 97:best practice 93: 91: 87: 83: 79: 76:consist of a 75: 70: 68: 64: 60: 56: 51: 49: 45: 41: 37: 33: 19: 4355:Anti-pattern 4318:Linda Rising 4244: 4237: 4182:Lazy loading 4114:Identity map 4081: 3765:Gang of Four 3756: 3718:the original 3698: 3674: 3651: 3629: 3604: 3577: 3553: 3530: 3527:Guttag, John 3500: 3472: 3447: 3423: 3398: 3382:Gamma, Erich 3371:the original 3348: 3321: 3290: 3263: 3237: 3215: 3192: 3162: 3136: 3127: 3093: 3067: 3047: 3001:(7): 23–30. 2998: 2992: 2976: 2951: 2943: 2932:. Retrieved 2925:Graham, Paul 2919: 2892: 2882: 2872: 2862: 2851:. Retrieved 2838: 2827:. Retrieved 2823:the original 2809: 2792: 2779: 2754: 2750: 2744: 2738:Lock Pattern 2733: 2714: 2708: 2697: 2678: 2672: 2655: 2632: 2622: 2598: 2588: 2564: 2557: 2533: 2512: 2489: 2463: 2452:. Retrieved 2450:. 2010-01-06 2442: 2431:. Retrieved 2427:the original 2417: 2407: 2400: 2387: 2380: 2337: 2333: 2323: 2312:. Retrieved 2301: 2274: 2264: 2256: 2250:. Retrieved 2239: 2202: 2191:. Retrieved 2187: 2178: 2164: 2151: 2135: 2129: 2064:Helper class 2019:Anti-pattern 1989: 1978: 1975: 1954: 1951:Peter Norvig 1940: 1929: 1923: 1918:Sample Code: 1917: 1911: 1905: 1899: 1893: 1879: 1873: 1867: 1861: 1855: 1849: 1840: 1829:Richard Helm 1817: 1724: 1554:anti-pattern 1551: 1449: 1445:Description 1086: 1078: 1074:Description 972: 794: 786: 782:Description 620: 559: 541: 533: 529:Description 502: 478: 466: 455: 445: 442:design motif 441: 439: 426: 419: 415: 407: 390: 364: 336: 312: 290: 268: 246: 224: 197: 181:Gamma, Erich 163: 156: 125: 109: 94: 73: 71: 59:re-inventing 57:rather than 52: 35: 29: 4327:Communities 4308:Jim Coplien 4283:Grady Booch 4268:Erich Gamma 4212:Type tunnel 4197:Object pool 4192:Null object 4187:Mock object 4049:Interceptor 4019:Thread pool 3934:Concurrency 3880:Interpreter 2110:Refactoring 1992:indirection 1924:Known Uses: 1825:Erich Gamma 1799:Interlocked 1745:object pool 1739:Thread pool 1526:-optimized 1268:Null object 1184:Interpreter 693:thread pool 683:Object pool 467:The annual 393:. Pearson. 4375:Categories 4222:Delegation 4157:Blackboard 3862:Behavioral 3814:Structural 3776:Creational 3116:Beck, Kent 3090:Beck, Kent 2934:2012-08-11 2910:1581134711 2853:2007-03-06 2829:2007-03-06 2497:. p.  2454:2010-01-06 2433:2008-01-31 2314:2008-01-31 2252:2012-05-15 2193:2006-05-26 2170:Beck, Kent 2122:References 1985:components 1880:Structure: 1099:Blackboard 885:Delegation 695:patterns. 422:documented 265:Beck, Kent 82:programmer 4288:Kent Beck 4014:Semaphore 4004:Scheduler 3847:Flyweight 3837:Decorator 3832:Composite 3804:Singleton 3799:Prototype 3218:. Wiley. 3003:CiteSeerX 2771:251442539 2342:CiteSeerX 2217:CiteSeerX 2155:Tektronix 1937:Criticism 1747:pattern. 1705:Scheduler 1472:scheduler 1342:fashion. 1209:aggregate 940:Flyweight 866:Decorator 847:Composite 750:Singleton 710:Prototype 647:pattern. 444:, a.k.a. 140:Kent Beck 116:algorithm 4348:See also 4150:patterns 4036:patterns 3989:Proactor 3936:patterns 3910:Strategy 3900:Observer 3890:Mediator 3885:Iterator 3767:patterns 3673:(1998). 3529:(2000). 3499:(2005). 3396:(1995). 3346:(1996). 3320:(2003). 3262:(2003). 3236:(1997). 3025:15328522 2927:(2002). 2870:(1998). 2596:(2002). 2531:(2002). 2372:11634997 2364:17080809 2002:See also 1376:Strategy 1287:Observer 1226:Mediator 1203:Iterator 664:Multiton 560:families 499:Examples 412:Practice 389:(2004). 363:(2004). 311:(2002). 267:(1997). 223:(1995). 195:(1994). 86:codebase 4202:Servant 4134:Model 2 3994:Reactor 3984:Monitor 3949:Balking 3920:Visitor 3895:Memento 3875:Command 3822:Adapter 3789:Builder 2801:2654843 1996:runtime 1856:Intent: 1669:Reactor 1486:Balking 1415:Visitor 1340:Boolean 1310:Servant 1249:Memento 1145:Command 807:Adapter 732:(RAII) 577:Builder 488:objects 484:classes 122:History 90:library 67:quality 55:concept 4256:People 4139:Broker 3842:Facade 3827:Bridge 3710:  3685:  3659:  3638:  3615:  3589:  3564:  3541:  3511:  3485:  3458:  3452:Apress 3435:  3410:  3363:  3332:  3301:  3274:  3248:  3222:  3203:  3173:  3147:  3104:  3078:  3055:  3023:  3005:  2964:  2907:  2799:  2769:  2721:  2685:  2643:  2610:  2576:  2545:  2505:  2370:  2362:  2344:  2289:  2231:624834 2229:  2219:  2213:Nantes 2184:OOPSLA 2140:OOPSLA 1835:, and 1627:PoEAA 1470:and a 1456:Other 1093:Other 1006:Module 985:Marker 921:Facade 828:Bridge 801:Other 621:single 548:Other 397:  375:  348:  323:  297:  275:  253:  231:  209:  152:OOPSLA 4231:Books 4148:Other 4084:-tier 3905:State 3852:Proxy 3374:(PDF) 3353:(PDF) 3021:S2CID 2989:(PDF) 2797:S2CID 2789:(PDF) 2767:S2CID 2664:(PDF) 2392:(PDF) 2368:S2CID 2227:S2CID 2069:Idiom 1963:Dylan 1451:POSA2 1442:Name 1357:State 1338:in a 1071:Name 1025:Proxy 977:PoEAA 779:Name 657:PoEAA 645:Proxy 526:Name 436:Motif 44:write 4207:Twin 4064:MVVM 3979:Lock 3974:Join 3708:ISBN 3683:ISBN 3657:ISBN 3636:ISBN 3613:ISBN 3587:ISBN 3562:ISBN 3539:ISBN 3509:ISBN 3483:ISBN 3456:ISBN 3433:ISBN 3408:ISBN 3361:ISBN 3330:ISBN 3299:ISBN 3272:ISBN 3246:ISBN 3220:ISBN 3201:ISBN 3171:ISBN 3145:ISBN 3102:ISBN 3076:ISBN 3053:ISBN 2962:ISBN 2905:ISBN 2719:ISBN 2683:ISBN 2641:ISBN 2608:ISBN 2574:ISBN 2543:ISBN 2503:ISBN 2360:PMID 2287:ISBN 1959:Lisp 1943:Java 1886:and 1766:Yes 1676:Yes 1660:Yes 1617:Lock 1601:Join 1560:Yes 1477:Yes 1428:Yes 1425:Yes 1422:Yes 1409:Yes 1406:Yes 1403:Yes 1389:Yes 1386:Yes 1383:Yes 1370:Yes 1367:Yes 1364:Yes 1351:Yes 1348:Yes 1345:Yes 1324:Yes 1321:Yes 1318:Yes 1304:Yes 1301:Yes 1298:Yes 1281:Yes 1278:Yes 1275:Yes 1262:Yes 1259:Yes 1256:Yes 1243:Yes 1240:Yes 1237:Yes 1220:Yes 1217:Yes 1214:Yes 1197:Yes 1194:Yes 1191:Yes 1178:Yes 1175:Yes 1172:Yes 1159:Yes 1156:Yes 1153:Yes 1139:Yes 1136:Yes 1133:Yes 1119:Yes 1116:Yes 1113:Yes 1057:Yes 1054:Yes 1051:Yes 1044:Twin 1038:Yes 1035:Yes 1032:Yes 1019:Yes 1016:Yes 1013:Yes 995:Yes 992:Yes 969:Yes 966:Yes 953:Yes 950:Yes 947:Yes 934:Yes 931:Yes 928:Yes 915:Yes 912:Yes 909:Yes 898:Yes 895:Yes 892:Yes 879:Yes 876:Yes 873:Yes 860:Yes 857:Yes 854:Yes 841:Yes 838:Yes 835:Yes 822:Yes 819:Yes 816:Yes 763:Yes 760:Yes 757:Yes 744:Yes 741:Yes 738:Yes 724:Yes 721:Yes 718:Yes 704:Yes 701:Yes 698:Yes 691:and 677:Yes 674:Yes 671:Yes 653:Yes 650:Yes 629:Yes 626:Yes 606:Yes 587:Yes 584:Yes 568:Yes 565:Yes 395:ISBN 373:ISBN 346:ISBN 321:ISBN 295:ISBN 273:ISBN 251:ISBN 229:ISBN 207:ISBN 142:and 99:for 48:code 46:the 34:, a 4076:ECS 4071:ADR 4059:MVP 4054:MVC 3013:doi 2958:105 2897:doi 2759:doi 2755:135 2637:179 2499:104 2352:doi 2279:doi 2144:doi 1961:or 1947:C++ 1945:or 1804:No 1781:No 1750:No 1730:No 1712:No 1696:No 1640:No 1624:No 1608:No 1592:No 1576:No 1537:No 1530:or 1524:GPU 1509:No 1493:No 1448:In 1289:or 1085:In 1077:In 793:In 785:In 540:In 532:In 486:or 130:by 74:not 30:In 4377:: 3706:. 3702:. 3681:. 3677:. 3611:. 3607:. 3585:. 3581:. 3560:. 3556:. 3537:. 3533:. 3525:; 3507:. 3503:. 3481:. 3477:. 3454:. 3450:. 3431:. 3427:. 3406:. 3402:. 3392:; 3388:; 3384:; 3355:. 3328:. 3324:. 3316:; 3297:. 3293:. 3270:. 3266:. 3244:. 3240:. 3199:. 3195:. 3187:; 3169:. 3165:. 3143:. 3139:. 3100:. 3096:. 3074:. 3019:. 3011:. 2999:39 2997:. 2991:. 2960:. 2903:. 2817:. 2795:. 2791:. 2765:. 2757:. 2753:. 2639:. 2631:. 2602:. 2568:. 2541:. 2537:. 2520:^ 2511:. 2501:. 2474:^ 2366:. 2358:. 2350:. 2338:12 2336:. 2332:. 2285:. 2255:. 2225:. 2182:. 2172:; 2150:. 2138:. 1831:, 1827:, 1807:— 1795:C# 1784:— 1769:— 1753:— 1733:— 1727:. 1715:— 1699:— 1679:— 1663:— 1643:— 1611:— 1595:— 1579:— 1563:— 1556:. 1540:— 1534:. 1512:— 1496:— 1480:— 1110:) 632:— 609:— 603:— 590:— 571:— 371:. 367:. 344:. 340:. 319:. 315:. 205:. 201:. 191:; 187:; 183:; 118:. 107:. 50:. 4082:n 3749:e 3742:t 3735:v 3691:. 3665:. 3644:. 3621:. 3595:. 3570:. 3547:. 3517:. 3491:. 3464:. 3441:. 3416:. 3338:. 3307:. 3280:. 3254:. 3228:. 3209:. 3179:. 3153:. 3110:. 3084:. 3061:. 3027:. 3015:: 2970:. 2937:. 2913:. 2899:: 2876:. 2856:. 2832:. 2803:. 2773:. 2761:: 2727:. 2691:. 2666:. 2649:. 2616:. 2582:. 2551:. 2457:. 2436:. 2374:. 2354:: 2317:. 2295:. 2281:: 2196:. 2146:: 403:. 381:. 354:. 329:. 303:. 281:. 259:. 237:. 215:. 20:)

Index

Software design patterns
software engineering
computer program
write
code
concept
re-inventing
develop software
quality
software artifact
programmer
codebase
library
best practice
software design
computer programming
programming paradigm
algorithm
architectural concept
Christopher Alexander
A Pattern Language
Kent Beck
Ward Cunningham
pattern languages
OOPSLA
computer science
Design Patterns: Elements of Reusable Object-Oriented Software
Pattern Languages of Programming
Portland Pattern Repository
Gamma, Erich

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑