543:', where one object 'has' or 'is part of' another object (implying that an aggregate object and its owner have identical lifetimes) and acquaintance, where one object merely 'knows of' another object. Sometimes acquaintance is called 'association' or the 'using' relationship. Acquaintance objects may request operations of each other, but they are not responsible for each other. Acquaintance is a weaker relationship than aggregation and suggests much
47:
334:
828:
In an interview with InformIT in 2009, Erich Gamma stated that the book authors had a discussion in 2005 on how they would have refactored the book and concluded that they would have recategorized some patterns and added a few additional ones, such as extension object/interface, dependency injection,
481:
They warn that the implementation of a subclass can become so bound up with the implementation of its parent class that any change in the parent's implementation will force the subclass to change. Furthermore, they claim that a way to avoid this is to inherit only from abstract classes—but then, they
488:
To the authors, 'delegation' is an extreme form of object composition that can always be used to replace inheritance. Delegation involves two objects: a 'sender' passes itself to a 'delegate' to let the delegate refer to the sender. Thus the link between two parts of a system are established only at
786:
When I see patterns in my programs, I consider it a sign of trouble. The shape of a program should reflect only the problem it needs to solve. Any other regularity in the code is a sign, to me at least, that I'm using abstractions that aren't powerful enough-- often that I'm generating by hand the
319:
meeting, "Towards an
Architecture Handbook", where Erich Gamma and Richard Helm met and discovered their common interest. They were later joined by Ralph Johnson and John Vlissides. The book was originally published on 21 October 1994, with a 1995 copyright, and was made available to the public at
302:
It has been influential to the field of software engineering and is regarded as an important source for object-oriented design theory and practice. More than 500,000 copies have been sold in
English and in 13 other languages. The authors are often referred to as the
554:' is a set of cooperating classes that make up a reusable design for a specific class of software. They state that applications are hard to design, toolkits are harder, and frameworks are the hardest to design.
818:) 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.
468:
The authors discuss the tension between inheritance and encapsulation at length and state that in their experience, designers overuse inheritance (Gang of Four 1995:20). The danger is stated as follows:
550:
The authors employ the term 'toolkit' where others might today use 'class library', as in C# or Java. In their parlance, toolkits are the object-oriented equivalent of subroutine libraries, whereas a '
287:. The book is divided into two parts, with the first two chapters exploring the capabilities and pitfalls of object-oriented programming, and the remaining chapters describing 23 classic
576:
are ones that create objects, rather than having to instantiate objects directly. This gives the program more flexibility in deciding which objects need to be created for a given case.
778:
is that its patterns are simply workarounds for missing features in C++, replacing elegant abstract features with lengthy concrete patterns, essentially becoming a "human compiler".
485:
Using inheritance is recommended mainly when adding to the functionality of existing components, reusing most of the old code and adding relatively small amounts of new code.
528:). These allow any type to be defined without specifying all the other types it uses—the unspecified types are supplied as 'parameters' at the point of use.
1181:
440:
406:
759:
awarded that year's
Programming Languages Achievement Award to the authors, in recognition of the impact of their work "on programming practice and
619:
concern class and object composition. They use inheritance to compose interfaces and define ways to compose objects to obtain new functionality.
1012:
919:
424:
clients remain unaware of the classes that implement these objects; clients only know about the abstract class(es) defining the interface
111:
1814:
391:
design techniques, based on the authors' experience, which they believe would lead to good object-oriented software design, including:
1706:
276:
134:
1141:
1819:
1731:
1056:
626:
allows classes with incompatible interfaces to work together by wrapping its own interface around that of an already existing class.
458:(in which objects with well-defined interfaces are used dynamically at runtime by objects obtaining references to other objects) as
374:
208:
82:
829:
type object, and null object. Gamma wanted to remove the
Singleton pattern, but there was no consensus among the authors to do so.
1504:
445:
57:
1824:
1679:
1303:
843:
679:
433:
356:
17:
1487:
1397:
848:
513:
1527:
535:"Dynamic, highly parameterized software is harder to understand and build than more static software." (Gang of Four 1995:21)
1497:
1492:
477:
to details of its parent's implementation, it's often said that 'inheritance breaks encapsulation'". (Gang of Four 1995:19)
1829:
1174:
505:
803:
414:
398:
230:
1772:
1610:
811:
799:
490:
474:
451:
160:
1387:
501:
1595:
1590:
1417:
821:
More light-hearted criticism has included a show trial at the 1999 OOPSLA meeting, and a parody of the format by
352:
348:
740:
defines the skeleton of an algorithm as an abstract class, allowing its subclasses to provide concrete behavior.
421:
clients remain unaware of the specific types of objects they use, as long as the object adheres to the interface
1635:
1600:
1567:
1217:
1167:
779:
580:
1432:
1537:
1509:
1447:
1412:
1348:
1190:
838:
767:
737:
288:
264:
31:
1514:
1442:
1392:
1227:
592:
1793:
1696:
1542:
1522:
1467:
450:, with white-box referring to visibility, because the internals of parent classes are often visible to
1605:
1562:
1557:
1547:
1457:
760:
260:
156:
1645:
1630:
1625:
1482:
1367:
1313:
853:
746:
separates an algorithm from an object structure by moving the hierarchy of methods into one object.
691:
517:
497:
1767:
1746:
1655:
1552:
1402:
1295:
1247:
1209:
925:
672:
616:
573:
568:
551:
540:
455:
402:
1134:"Design Patterns 15 Years Later: An Interview with Erich Gamma, Richard Helm, and Ralph Johnson"
1104:
662:
provides a placeholder for another object to control access, reduce cost, and reduce complexity.
343:
may contain an excessive amount of intricate detail that may interest only a particular audience
700:
accesses the elements of an object sequentially without exposing its underlying representation.
1437:
1280:
1270:
1265:
1237:
1232:
1008:
915:
653:
641:
635:
604:
598:
521:
215:
203:
1736:
1477:
1422:
1343:
1333:
1323:
1318:
1039:
981:
950:
907:
880:
731:
719:
703:
697:
531:
The authors admit that delegation and parameterization are very powerful but add a warning:
509:
429:
241:
1726:
1650:
1427:
1382:
1353:
1328:
1308:
1255:
1222:
1133:
807:
743:
722:
is a publish/subscribe pattern, which allows a number of observer objects to see an event.
713:
685:
623:
586:
388:
632:
decouples an abstraction from its implementation so that the two can vary independently.
465:
because no internal details of composed objects need be visible in the code using them.
1711:
1572:
1275:
1260:
707:
647:
629:
544:
280:
170:
152:
139:
35:
1002:
904:
2017 IEEE International
Conference on Software Quality, Reliability and Security (QRS)
547:
between objects, which can often be desirable for maximum maintainability in designs.
110:
1808:
1532:
1377:
1338:
1285:
725:
710:
between classes by being the only class that has detailed knowledge of their methods.
659:
1119:
929:
638:
composes zero-or-more similar objects so that they can be manipulated as one object.
1788:
1751:
1640:
1615:
1407:
1083:
970:"Bad Smells of Gang of Four Design Patterns: A Decade Systematic Literature Review"
791:
272:
129:
954:
884:
1741:
1716:
1701:
1620:
1452:
822:
656:
reduces the cost of creating and manipulating a large number of similar objects.
496:
The authors also discuss so-called parameterized types, which are also known as
284:
268:
124:
1004:
Pitfalls of aspectJ implementations of some of the gang-of-four design patterns
944:
900:"The Effect of Gang-of-Four Design Patterns Usage on Design Quality Attributes"
899:
874:
968:
Almadi, Sara H. S.; Hooshyar, Danial; Ahmad, Rodina Binti (26 January 2021).
1721:
460:
355:
any relevant information, and removing excessive detail that may be against
296:
1159:
734:
allows one of a family of algorithms to be selected on-the-fly at runtime.
1087:
589:
constructs complex objects by separating construction and representation.
222:
986:
969:
911:
395:"Program to an interface, not an implementation." (Gang of Four 1995:18)
815:
756:
728:
allows an object to alter its behavior when its internal state changes.
716:
provides the ability to restore an object to its previous state (undo).
644:
dynamically adds/overrides behavior in an existing method of an object.
1060:
1027:
316:
525:
292:
1163:
1132:
Gamma, Erich; Helm, Richard; Johnson, Ralph (22 October 2009).
1001:
Monteiro, Miguel Pessoa; Fernandes, JoĂŁo M. (26 January 2004).
675:
are specifically concerned with communication between objects.
946:
Scala Design
Patterns: Patterns for Practical Reuse and Design
327:
256:
Design
Patterns: Elements of Reusable Object-Oriented Software
40:
30:
This article is about the book. For the generic articles, see
18:
Design
Patterns: Elements of Reusable Object-Oriented Software
595:
creates objects without specifying the exact class to create.
436:, which are central features of object-oriented programming.
315:
The book started at a birds-of-a-feather session at the 1990
216:
56:
may be in need of reorganization to comply with
Knowledge's
810:
who implemented several of the 23 design patterns using an
607:
restricts object creation for a class to only one instance.
242:
688:
creates objects that encapsulate actions and parameters.
650:
provides a simplified interface to a large body of code.
949:. Springer International Publishing. pp. 135–136.
64:
898:
Hussain, Shahid; Keung, Jacky; Khan, Arif Ali (2017).
873:
Zehoo, Edmund (26 January 2010). Zehoo, Edmund (ed.).
798:
are simplified or eliminated by language features in
682:
delegates commands to a chain of processing objects.
1781:
1760:
1689:
1664:
1581:
1466:
1366:
1294:
1246:
1208:
1197:
240:
228:
214:
202:
194:
186:
176:
166:
148:
117:
806:. Related observations were made by Hannemann and
1106:Design pattern implementation in Java and AspectJ
583:groups object factories that have a common theme.
413:The authors claim the following as advantages of
943:Hunt, John (26 January 2013). Hunt, John (ed.).
794:demonstrates that 16 out of the 23 patterns in
784:
493:article has more information about delegation.
787:expansions of some macro that I need to write.
766:Criticism has been directed at the concept of
601:creates objects by cloning an existing object.
67:to make improvements to the overall structure.
1175:
8:
482:point out that there is minimal code reuse.
97:
1140:(Interview). Interviewed by Larry O'Brien.
1205:
1182:
1168:
1160:
109:
96:
985:
539:The authors further distinguish between '
375:Learn how and when to remove this message
83:Learn how and when to remove this message
825:entitled "Kansas City Air Conditioner".
865:
1144:from the original on 20 February 2019
774:specifically. A primary criticism of
7:
1089:Design Patterns in Dynamic Languages
876:Pro ODP .NET for Oracle Database 11g
454:. In contrast, the authors refer to
1017:– via repositorium.uminho.pt.
311:Development and publication history
1120:The Show Trial of the Gang-of-Four
694:implements a specialized language.
489:runtime, not at compile-time. The
428:Use of an interface also leads to
25:
332:
291:. The book includes examples in
45:
1680:Enterprise Integration Patterns
844:Enterprise Integration Patterns
473:"Because inheritance exposes a
1040:"SIGPLAN FY '05 Annual Report"
1007:. Universidad de Extremadura.
849:GRASP (object-oriented design)
27:1994 software engineering book
1:
387:Chapter 1 is a discussion of
955:10.1007/978-3-319-02192-8_16
885:10.1007/978-1-4302-2821-9_13
879:. Apress. pp. 351–371.
399:Composition over inheritance
357:Knowledge's inclusion policy
1773:Portland Pattern Repository
812:aspect-oriented programming
161:object-oriented programming
1846:
1815:Software engineering books
957:– via Springer Link.
887:– via Springer Link.
673:behavioral design patterns
566:
409:'." (Gang of Four 1995:20)
267:. The book was written by
29:
320:the 1994 OOPSLA meeting.
108:
1820:Software design patterns
1398:Event-based asynchronous
1191:Software design patterns
768:software design patterns
289:software design patterns
265:software design patterns
1304:Chain of responsibility
1103:Hannemann, Jan (2002).
839:Software design pattern
680:Chain of responsibility
32:software design pattern
1825:1994 non-fiction books
1443:Scheduled-task pattern
1393:Double-checked locking
789:
1794:Architectural pattern
1697:Christopher Alexander
439:The authors refer to
417:over implementation:
283:, with a foreword by
100:Elements of Reusable
1830:Addison-Wesley books
1606:Dependency injection
1563:Inversion of control
1558:Data transfer object
1458:Thread-local storage
1062:Revenge of the Nerds
906:. pp. 263–273.
854:Pedagogical patterns
761:programming language
261:software engineering
157:software engineering
1611:Intercepting filter
987:10.3390/su131810256
912:10.1109/QRS.2017.37
617:Structural patterns
574:Creational patterns
518:Visual Basic (.NET)
105:
65:editing the article
1768:The Hillside Group
1553:Data access object
1403:Guarded suspension
1388:Binding properties
770:generally, and at
569:Creational pattern
456:object composition
403:object composition
1802:
1801:
1596:Business delegate
1528:Publish–subscribe
1362:
1361:
1014:978-84-688-8889-7
921:978-1-5386-0592-9
407:class inheritance
385:
384:
377:
252:
251:
248:QA76.64 .D47 1995
187:Publication place
93:
92:
85:
58:layout guidelines
16:(Redirected from
1837:
1601:Composite entity
1478:Front controller
1218:Abstract factory
1206:
1184:
1177:
1170:
1161:
1154:
1153:
1151:
1149:
1129:
1123:
1117:
1111:
1110:
1100:
1094:
1093:
1080:
1074:
1073:
1071:
1069:
1053:
1047:
1046:
1044:
1036:
1030:
1025:
1019:
1018:
998:
992:
991:
989:
965:
959:
958:
940:
934:
933:
895:
889:
888:
870:
755:In 2005 the ACM
581:Abstract factory
558:Patterns by type
524:) or templates (
380:
373:
369:
366:
360:
336:
335:
328:
263:book describing
244:
218:
178:Publication date
113:
106:
103:
98:Design Patterns:
88:
81:
77:
74:
68:
49:
48:
41:
21:
1845:
1844:
1840:
1839:
1838:
1836:
1835:
1834:
1805:
1804:
1803:
1798:
1777:
1756:
1747:Douglas Schmidt
1727:Ward Cunningham
1685:
1673:Design Patterns
1660:
1651:Method chaining
1583:
1577:
1538:Service locator
1469:
1462:
1433:Read–write lock
1369:
1358:
1349:Template method
1290:
1242:
1200:
1193:
1188:
1158:
1157:
1147:
1145:
1131:
1130:
1126:
1118:
1114:
1102:
1101:
1097:
1082:
1081:
1077:
1067:
1065:
1055:
1054:
1050:
1042:
1038:
1037:
1033:
1026:
1022:
1015:
1000:
999:
995:
967:
966:
962:
942:
941:
937:
922:
897:
896:
892:
872:
871:
867:
862:
835:
796:Design Patterns
776:Design Patterns
772:Design Patterns
753:
738:Template method
669:
614:
571:
565:
560:
545:looser coupling
430:dynamic binding
389:object-oriented
381:
370:
364:
361:
347:Please help by
346:
337:
333:
326:
313:
233:
179:
153:Design patterns
144:
102:Object-Oriented
101:
99:
89:
78:
72:
69:
63:Please help by
62:
50:
46:
39:
28:
23:
22:
15:
12:
11:
5:
1843:
1841:
1833:
1832:
1827:
1822:
1817:
1807:
1806:
1800:
1799:
1797:
1796:
1791:
1785:
1783:
1779:
1778:
1776:
1775:
1770:
1764:
1762:
1758:
1757:
1755:
1754:
1749:
1744:
1739:
1734:
1729:
1724:
1719:
1714:
1712:John Vlissides
1709:
1704:
1699:
1693:
1691:
1687:
1686:
1684:
1683:
1676:
1668:
1666:
1662:
1661:
1659:
1658:
1653:
1648:
1643:
1638:
1633:
1628:
1623:
1618:
1613:
1608:
1603:
1598:
1593:
1587:
1585:
1579:
1578:
1576:
1575:
1570:
1565:
1560:
1555:
1550:
1545:
1540:
1535:
1530:
1525:
1520:
1512:
1507:
1502:
1501:
1500:
1495:
1485:
1480:
1474:
1472:
1464:
1463:
1461:
1460:
1455:
1450:
1445:
1440:
1435:
1430:
1425:
1420:
1415:
1410:
1405:
1400:
1395:
1390:
1385:
1380:
1374:
1372:
1364:
1363:
1360:
1359:
1357:
1356:
1351:
1346:
1341:
1336:
1331:
1326:
1321:
1316:
1311:
1306:
1300:
1298:
1292:
1291:
1289:
1288:
1283:
1278:
1273:
1268:
1263:
1258:
1252:
1250:
1244:
1243:
1241:
1240:
1235:
1230:
1228:Factory method
1225:
1220:
1214:
1212:
1203:
1195:
1194:
1189:
1187:
1186:
1179:
1172:
1164:
1156:
1155:
1124:
1112:
1095:
1075:
1048:
1031:
1020:
1013:
993:
974:Sustainability
960:
935:
920:
890:
864:
863:
861:
858:
857:
856:
851:
846:
841:
834:
831:
752:
749:
748:
747:
741:
735:
729:
723:
717:
711:
708:loose coupling
701:
695:
689:
683:
668:
665:
664:
663:
657:
651:
645:
639:
633:
627:
613:
610:
609:
608:
602:
596:
593:Factory method
590:
584:
567:Main article:
564:
561:
559:
556:
537:
536:
479:
478:
426:
425:
422:
411:
410:
396:
383:
382:
340:
338:
331:
325:
322:
312:
309:
281:John Vlissides
250:
249:
246:
238:
237:
234:
229:
226:
225:
220:
212:
211:
206:
200:
199:
196:
192:
191:
188:
184:
183:
180:
177:
174:
173:
171:Addison-Wesley
168:
164:
163:
150:
146:
145:
143:
142:
140:John Vlissides
137:
132:
127:
121:
119:
115:
114:
91:
90:
53:
51:
44:
36:design pattern
26:
24:
14:
13:
10:
9:
6:
4:
3:
2:
1842:
1831:
1828:
1826:
1823:
1821:
1818:
1816:
1813:
1812:
1810:
1795:
1792:
1790:
1787:
1786:
1784:
1780:
1774:
1771:
1769:
1766:
1765:
1763:
1759:
1753:
1750:
1748:
1745:
1743:
1740:
1738:
1737:Robert Martin
1735:
1733:
1732:Martin Fowler
1730:
1728:
1725:
1723:
1720:
1718:
1715:
1713:
1710:
1708:
1707:Ralph Johnson
1705:
1703:
1700:
1698:
1695:
1694:
1692:
1688:
1682:
1681:
1677:
1675:
1674:
1670:
1669:
1667:
1663:
1657:
1654:
1652:
1649:
1647:
1644:
1642:
1639:
1637:
1634:
1632:
1629:
1627:
1624:
1622:
1619:
1617:
1614:
1612:
1609:
1607:
1604:
1602:
1599:
1597:
1594:
1592:
1589:
1588:
1586:
1580:
1574:
1571:
1569:
1566:
1564:
1561:
1559:
1556:
1554:
1551:
1549:
1546:
1544:
1543:Active record
1541:
1539:
1536:
1534:
1533:Naked objects
1531:
1529:
1526:
1524:
1523:Specification
1521:
1519:
1517:
1513:
1511:
1508:
1506:
1503:
1499:
1496:
1494:
1491:
1490:
1489:
1486:
1484:
1481:
1479:
1476:
1475:
1473:
1471:
1468:Architectural
1465:
1459:
1456:
1454:
1451:
1449:
1446:
1444:
1441:
1439:
1436:
1434:
1431:
1429:
1426:
1424:
1421:
1419:
1416:
1414:
1411:
1409:
1406:
1404:
1401:
1399:
1396:
1394:
1391:
1389:
1386:
1384:
1381:
1379:
1378:Active object
1376:
1375:
1373:
1371:
1365:
1355:
1352:
1350:
1347:
1345:
1342:
1340:
1337:
1335:
1332:
1330:
1327:
1325:
1322:
1320:
1317:
1315:
1312:
1310:
1307:
1305:
1302:
1301:
1299:
1297:
1293:
1287:
1284:
1282:
1279:
1277:
1274:
1272:
1269:
1267:
1264:
1262:
1259:
1257:
1254:
1253:
1251:
1249:
1245:
1239:
1236:
1234:
1231:
1229:
1226:
1224:
1221:
1219:
1216:
1215:
1213:
1211:
1207:
1204:
1202:
1196:
1192:
1185:
1180:
1178:
1173:
1171:
1166:
1165:
1162:
1143:
1139:
1135:
1128:
1125:
1122:, Brian Foote
1121:
1116:
1113:
1108:
1107:
1099:
1096:
1091:
1090:
1085:
1084:Norvig, Peter
1079:
1076:
1064:
1063:
1058:
1052:
1049:
1041:
1035:
1032:
1029:
1024:
1021:
1016:
1010:
1006:
1005:
997:
994:
988:
983:
980:(18): 10256.
979:
975:
971:
964:
961:
956:
952:
948:
947:
939:
936:
931:
927:
923:
917:
913:
909:
905:
901:
894:
891:
886:
882:
878:
877:
869:
866:
859:
855:
852:
850:
847:
845:
842:
840:
837:
836:
832:
830:
826:
824:
819:
817:
813:
809:
805:
801:
797:
793:
788:
783:
781:
777:
773:
769:
764:
762:
758:
750:
745:
742:
739:
736:
733:
730:
727:
724:
721:
718:
715:
712:
709:
705:
702:
699:
696:
693:
690:
687:
684:
681:
678:
677:
676:
674:
666:
661:
658:
655:
652:
649:
646:
643:
640:
637:
634:
631:
628:
625:
622:
621:
620:
618:
611:
606:
603:
600:
597:
594:
591:
588:
585:
582:
579:
578:
577:
575:
570:
562:
557:
555:
553:
548:
546:
542:
534:
533:
532:
529:
527:
523:
519:
515:
511:
507:
503:
499:
494:
492:
486:
483:
476:
472:
471:
470:
466:
464:
462:
457:
453:
449:
447:
442:
437:
435:
431:
423:
420:
419:
418:
416:
408:
404:
400:
397:
394:
393:
392:
390:
379:
376:
368:
358:
354:
350:
344:
341:This section
339:
330:
329:
323:
321:
318:
310:
308:
306:
300:
298:
294:
290:
286:
282:
278:
277:Ralph Johnson
274:
270:
266:
262:
258:
257:
247:
245:
243:LC Class
239:
235:
232:
231:Dewey Decimal
227:
224:
221:
219:
213:
210:
209:0-201-63361-2
207:
205:
201:
197:
193:
190:United States
189:
185:
181:
175:
172:
169:
165:
162:
158:
154:
151:
147:
141:
138:
136:
135:Ralph Johnson
133:
131:
128:
126:
123:
122:
120:
116:
112:
107:
95:
87:
84:
76:
66:
60:
59:
54:This article
52:
43:
42:
37:
33:
19:
1789:Anti-pattern
1752:Linda Rising
1678:
1672:
1671:
1616:Lazy loading
1548:Identity map
1515:
1199:Gang of Four
1198:
1146:. Retrieved
1137:
1127:
1115:
1105:
1098:
1088:
1078:
1066:. Retrieved
1061:
1057:Graham, Paul
1051:
1034:
1028:Richard Helm
1023:
1003:
996:
977:
973:
963:
945:
938:
903:
893:
875:
868:
827:
820:
795:
792:Peter Norvig
790:
785:
775:
771:
765:
754:
670:
615:
572:
549:
538:
530:
495:
487:
484:
480:
467:
459:
444:
438:
434:polymorphism
427:
412:
386:
371:
365:October 2020
362:
349:spinning off
342:
324:Introduction
314:
305:Gang of Four
304:
301:
273:Richard Helm
259:(1994) is a
255:
254:
253:
130:Richard Helm
94:
79:
70:
55:
1761:Communities
1742:Jim Coplien
1717:Grady Booch
1702:Erich Gamma
1646:Type tunnel
1631:Object pool
1626:Null object
1621:Mock object
1483:Interceptor
1453:Thread pool
1368:Concurrency
1314:Interpreter
1148:1 September
823:Jim Coplien
780:Paul Graham
692:Interpreter
541:Aggregation
441:inheritance
285:Grady Booch
269:Erich Gamma
125:Erich Gamma
1809:Categories
1656:Delegation
1591:Blackboard
1296:Behavioral
1248:Structural
1210:Creational
860:References
814:language (
667:Behavioral
612:Structural
563:Creational
452:subclasses
415:interfaces
401:: "Favor '
353:relocating
236:005.1/2 20
1722:Kent Beck
1448:Semaphore
1438:Scheduler
1281:Flyweight
1271:Decorator
1266:Composite
1238:Singleton
1233:Prototype
1068:11 August
763:design".
751:Reception
654:Flyweight
642:Decorator
636:Composite
605:Singleton
599:Prototype
552:framework
461:black-box
446:white-box
297:Smalltalk
167:Publisher
104:Software
73:July 2013
1782:See also
1584:patterns
1470:patterns
1423:Proactor
1370:patterns
1344:Strategy
1334:Observer
1324:Mediator
1319:Iterator
1201:patterns
1142:Archived
1138:InformIT
1086:(1998).
1059:(2002).
930:21343926
833:See also
808:Kiczales
732:Strategy
720:Observer
704:Mediator
698:Iterator
498:generics
491:Callback
475:subclass
405:' over '
223:31171684
1636:Servant
1568:Model 2
1428:Reactor
1418:Monitor
1383:Balking
1354:Visitor
1329:Memento
1309:Command
1256:Adapter
1223:Builder
816:AspectJ
782:wrote:
757:SIGPLAN
744:Visitor
714:Memento
706:allows
686:Command
624:Adapter
587:Builder
307:(GoF).
149:Subject
1690:People
1573:Broker
1276:Facade
1261:Bridge
1011:
928:
918:
648:Facade
630:Bridge
522:Delphi
520:, and
506:Eiffel
317:OOPSLA
279:, and
118:Author
1665:Books
1582:Other
1518:-tier
1339:State
1286:Proxy
1043:(PDF)
926:S2CID
804:Dylan
726:State
671:Most
660:Proxy
463:reuse
448:reuse
195:Pages
1641:Twin
1498:MVVM
1413:Lock
1408:Join
1150:2019
1070:2012
1009:ISBN
916:ISBN
800:Lisp
510:Java
432:and
295:and
217:OCLC
204:ISBN
182:1994
34:and
1510:ECS
1505:ADR
1493:MVP
1488:MVC
982:doi
951:doi
908:doi
881:doi
802:or
526:C++
502:Ada
443:as
351:or
293:C++
198:395
1811::
1136:.
978:13
976:.
972:.
924:.
914:.
902:.
516:,
514:C#
512:,
508:,
504:,
299:.
275:,
271:,
159:,
155:,
1516:n
1183:e
1176:t
1169:v
1152:.
1109:.
1092:.
1072:.
1045:.
990:.
984::
953::
932:.
910::
883::
500:(
378:)
372:(
367:)
363:(
359:.
345:.
86:)
80:(
75:)
71:(
61:.
38:.
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.