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:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.