Skip to content

Commit 2ff7ddf

Browse files
authored
Merge branch 'master' into java21
2 parents d4efc23 + 51d5ef1 commit 2ff7ddf

File tree

23 files changed

+673
-55
lines changed

23 files changed

+673
-55
lines changed

.all-contributorsrc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3448,6 +3448,24 @@
34483448
"contributions": [
34493449
"doc"
34503450
]
3451+
},
3452+
{
3453+
"login": "DenizAltunkapan",
3454+
"name": "Deniz Altunkapan",
3455+
"avatar_url": "https://avatars.githubusercontent.com/u/93663085?v=4",
3456+
"profile": "https://github.com/DenizAltunkapan",
3457+
"contributions": [
3458+
"translation"
3459+
]
3460+
},
3461+
{
3462+
"login": "johnklint81",
3463+
"name": "John Klint",
3464+
"avatar_url": "https://avatars.githubusercontent.com/u/70539458?v=4",
3465+
"profile": "https://github.com/johnklint81",
3466+
"contributions": [
3467+
"code"
3468+
]
34513469
}
34523470
],
34533471
"contributorsPerLine": 6,

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=coverage)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
77
[![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
88
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
9-
[![All Contributors](https://img.shields.io/badge/all_contributors-378-orange.svg?style=flat-square)](#contributors-)
9+
[![All Contributors](https://img.shields.io/badge/all_contributors-380-orange.svg?style=flat-square)](#contributors-)
1010
<!-- ALL-CONTRIBUTORS-BADGE:END -->
1111

1212
<br/>
@@ -564,6 +564,10 @@ This project is licensed under the terms of the MIT license.
564564
<td align="center" valign="top" width="16.66%"><a href="https://github.com/Francisco-G-P"><img src="https://avatars.githubusercontent.com/u/186766789?v=4?s=100" width="100px;" alt="Francisco-G-P"/><br /><sub><b>Francisco-G-P</b></sub></a><br /><a href="#translation-Francisco-G-P" title="Translation">🌍</a></td>
565565
<td align="center" valign="top" width="16.66%"><a href="https://github.com/Duartegdm"><img src="https://avatars.githubusercontent.com/u/137895372?v=4?s=100" width="100px;" alt="Gabriel Duarte"/><br /><sub><b>Gabriel Duarte</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Duartegdm" title="Documentation">📖</a></td>
566566
</tr>
567+
<tr>
568+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/DenizAltunkapan"><img src="https://avatars.githubusercontent.com/u/93663085?v=4?s=100" width="100px;" alt="Deniz Altunkapan"/><br /><sub><b>Deniz Altunkapan</b></sub></a><br /><a href="#translation-DenizAltunkapan" title="Translation">🌍</a></td>
569+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/johnklint81"><img src="https://avatars.githubusercontent.com/u/70539458?v=4?s=100" width="100px;" alt="John Klint"/><br /><sub><b>John Klint</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=johnklint81" title="Code">💻</a></td>
570+
</tr>
567571
</tbody>
568572
</table>
569573

abstract-document/README.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ Wikipedia says
3333

3434
> An object-oriented structural design pattern for organizing objects in loosely typed key-value stores and exposing the data using typed views. The purpose of the pattern is to achieve a high degree of flexibility between components in a strongly typed language where new properties can be added to the object-tree on the fly, without losing the support of type-safety. The pattern makes use of traits to separate different properties of a class into different interfaces.
3535
36+
Class diagram
37+
38+
![Abstract Document class diagram](./etc/abstract-document.png "Abstract Document class diagram")
39+
40+
3641
## Programmatic Example of Abstract Document Pattern in Java
3742

3843
Consider a car that consists of multiple parts. However, we don't know if the specific car really has all the parts, or just some of them. Our cars are dynamic and extremely flexible.
@@ -119,6 +124,13 @@ public interface HasParts extends Document {
119124
return children(Property.PARTS.toString(), Part::new);
120125
}
121126
}
127+
128+
public class Part extends AbstractDocument implements HasType, HasModel, HasPrice {
129+
130+
public Part(Map<String, Object> properties) {
131+
super(properties);
132+
}
133+
}
122134
```
123135

124136
Now we are ready to introduce the `Car`.
@@ -179,10 +191,6 @@ The program output:
179191
07:21:57.395 [main] INFO com.iluwatar.abstractdocument.App -- door/Lambo/300
180192
```
181193
182-
## Abstract Document Pattern Class Diagram
183-
184-
![Abstract Document](./etc/abstract-document.png "Abstract Document Traits and Domain")
185-
186194
## When to Use the Abstract Document Pattern in Java
187195
188196
The Abstract Document design pattern is especially beneficial in scenarios requiring management of different document types in Java that share some common attributes or behaviors, but also have unique attributes or behaviors specific to their individual types. Here are some scenarios where the Abstract Document design pattern can be applicable:

abstract-factory/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ Wikipedia says
3636

3737
> The abstract factory pattern provides a way to encapsulate a group of individual factories that have a common theme without specifying their concrete classes
3838
39+
Class diagram
40+
41+
![Abstract Factory class diagram](./etc/abstract-factory.urm.png "Abstract Factory class diagram")
42+
3943
## Programmatic Example of Abstract Factory in Java
4044

4145
To create a kingdom using the Abstract Factory pattern in Java, we need objects with a common theme. The elven kingdom needs an elven king, elven castle, and elven army whereas the orcish kingdom needs an orcish king, orcish castle, and orcish army. There is a dependency between the objects in the kingdom.
@@ -165,10 +169,6 @@ The program output:
165169
07:35:46.343 [main] INFO com.iluwatar.abstractfactory.App -- This is the orc king!
166170
```
167171

168-
## Abstract Factory Pattern Class Diagram
169-
170-
![Abstract Factory](./etc/abstract-factory.urm.png "Abstract Factory class diagram")
171-
172172
## When to Use the Abstract Factory Pattern in Java
173173

174174
Use the Abstract Factory pattern in Java when:

active-object/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ Wikipedia says
4141
> * The implementation of the active object method.
4242
> * A callback or variable for the client to receive the result.
4343
44+
Sequence diagram
45+
46+
![Active Object sequence diagram](./etc/active-object-sequence-diagram.png)
47+
48+
4449
## Programmatic Example of Active Object in Java
4550

4651
This section explains how the Active Object design pattern works in Java, highlighting its use in asynchronous task management and concurrency control.
81.5 KB
Loading

acyclic-visitor/README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ In plain words
2929

3030
> The Acyclic Visitor pattern allows new functions to be added to existing class hierarchies without affecting those hierarchies, and without creating the dependency cycles that are inherent to the GangOfFour VisitorPattern.
3131
32+
Sequence diagram
33+
34+
![Acyclic Visitor sequence diagram](./etc/acyclic-visitor-sequence-diagram.png "Acyclic Visitor sequence diagram")
35+
36+
3237
## Programmatic Example of Acyclic Visitor in Java
3338

3439
In this Java example, we have a hierarchy of modem classes illustrating the Acyclic Visitor pattern. The modems in this hierarchy need to be visited by an external algorithm based on filtering criteria (is it Unix or DOS compatible modem).
@@ -138,10 +143,6 @@ Program output:
138143
09:15:11.127 [main] INFO com.iluwatar.acyclicvisitor.ConfigureForUnixVisitor -- Zoom modem used with Unix configurator.
139144
```
140145

141-
## Acyclic Visitor Pattern Class Diagram
142-
143-
![Acyclic Visitor](./etc/acyclic-visitor.png "Acyclic Visitor")
144-
145146
## When to Use the Acyclic Visitor Pattern in Java
146147

147148
This pattern can be used:
27.8 KB
Loading

localization/de/README.md

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,48 @@
1-
<!-- the line below needs to be an empty line C: (its because kramdown isnt
2-
that smart and dearly wants an empty line before a heading to be able to
3-
display it as such, e.g. website) -->
4-
51
# In Java implementierte Entwurfsmuster
62

73
![Java CI](https://github.com/iluwatar/java-design-patterns/workflows/Java%20CI/badge.svg)
8-
[![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/iluwatar/java-design-patterns/master/LICENSE.md)
9-
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=ncloc)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
10-
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=coverage)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
11-
[![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
4+
[![Lizenz MIT](https://img.shields.io/badge/lizenz-MIT-blue.svg)](https://raw.githubusercontent.com/iluwatar/java-design-patterns/master/LICENSE.md)
5+
[![Codezeilen](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=ncloc)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
6+
[![Abdeckung](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=coverage)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
7+
[![Chat beitreten unter https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
128
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
139
[![All Contributors](https://img.shields.io/badge/all_contributors-208-orange.svg?style=flat-square)](#contributors-)
1410
<!-- ALL-CONTRIBUTORS-BADGE:END -->
1511

1612
<br/>
1713

18-
In einer anderen Sprache lesen : [**zh**](localization/zh/README.md), [**ko**](localization/ko/README.md), [**fr**](localization/fr/README.md), [**tr**](localization/tr/README.md), [**ar**](localization/ar/README.md), [**es**](localization/es/README.md), [**pt**](localization/pt/README.md), [**id**](localization/id/README.md), [**ru**](localization/ru/README.md), [**de**](localization/de/README.md), [**ja**](localization/ja/README.md)
14+
In anderen Sprachen lesen: [**zh**](localization/zh/README.md), [**ko**](localization/ko/README.md), [**fr**](localization/fr/README.md), [**tr**](localization/tr/README.md), [**ar**](localization/ar/README.md), [**es**](localization/es/README.md), [**pt**](localization/pt/README.md), [**id**](localization/id/README.md), [**ru**](localization/ru/README.md), [**de**](localization/de/README.md), [**ja**](localization/ja/README.md)
1915

2016
<br/>
2117

2218
# Einführung
2319

24-
Entwurfschemas sind die besten formalisierten Praktiken, die ein Programmierer verwenden kann,
25-
um allgemeine Probleme beim Entwurf einer Anwendung oder eines Systems zu lösen.
20+
Entwurfsmuster sind bewährte Lösungen, die Entwickler nutzen können, um häufige Probleme beim Entwurf von Anwendungen oder Systemen zu lösen.
2621

27-
Entwurfschemas können den Entwicklungsprozess beschleunigen, indem sie getestete und bewährte
28-
Entwicklungsparadigmen bereitstellen.
22+
Sie helfen dabei, den Entwicklungsprozess zu beschleunigen, indem sie erprobte und zuverlässige Ansätze bereitstellen.
2923

30-
Die Wiederverwendung von Entwurfschemas hilft, subtile Fehler zu vermeiden, die größere
31-
Probleme verursachen können, sowie die Lesbarkeit des Codes für Programmierer und Architekten zu verbessern,
32-
welche mit den Prinzipien der Entwurfsmuster vertraut sind.
24+
Die Wiederverwendung von Entwurfsmustern verhindert subtile Fehler, die zu größeren Problemen führen können, und verbessert die Lesbarkeit des Codes – besonders für Entwickler und Architekten, die mit diesen Mustern vertraut sind.
3325

3426
# Erste Schritte
3527

36-
Auf dieser Seite werden Java Entwurfschemas vorgestellt. Die Lösungen wurden entwickelt von
37-
erfahrenen Programmierern und Architekten aus der Open-Source-Gemeinschaft. Die
38-
Schemas können anhand ihrer übergeordneten Beschreibungen oder anhand ihres
39-
Quellcodes durchsucht werden. Die Quellcode-Beispiele sind gut kommentiert und können als
40-
Programmiertutorials zur Implementierung eines bestimmten Schemas angesehen werden. Wir verwenden die am besten
41-
bekannten und erprobtesten Open-Source Java-Technologien.
28+
Diese Seite stellt Java-Entwurfsmuster vor. Die Lösungen wurden von erfahrenen Entwicklern und Architekten aus der Open-Source-Community erstellt. Die Muster können entweder durch ihre Beschreibungen oder durch den Quellcode erkundet werden. Die Codebeispiele sind gut kommentiert und eignen sich als Tutorials, um die Muster zu verstehen und umzusetzen. Wir verwenden dabei bekannte und bewährte Open-Source-Java-Technologien.
4229

43-
Bevor Sie in die Materie der Entwurfschemas eintauchen, sollten sie sich mit den verschiednen
44-
[Software-Entwurfsprinzipien](https://java-design-patterns.com/principles/) auseinandersetzen.
30+
Bevor Sie sich mit den Entwurfsmustern beschäftigen, sollten Sie sich mit den grundlegenden [Software-Entwurfsprinzipien](https://java-design-patterns.com/principles/) vertraut machen.
4531

46-
Alle Entwürfe sollten so einfach wie möglich gehalten werden. Sie sollten mit KISS, YAGNI,
47-
und Do The Simplest Thing That Could Possibly Work prinzipen anfangen. Komplexe Entwurfschemas sollen nur eingesetzt werden, wenn diese für sinnvolle Erweiterungen benötigt werden.
32+
Entwürfe sollten immer so einfach wie möglich gehalten werden. Beginnen Sie mit den Prinzipien KISS (Keep It Simple, Stupid), YAGNI (You Aren’t Gonna Need It) und "Do The Simplest Thing That Could Possibly Work". Komplexe Muster sollten nur dann verwendet werden, wenn sie wirklich notwendig sind.
4833

49-
Sobald sie mit diesen Konzepten vertraut sind, können sie beginnen, sich mit den [verfügbaren Entwurfschemas](https://java-design-patterns.com/patterns/) auseinanderzusetzen, durch einen
50-
der folgenden Ansätze
34+
Sobald Sie mit diesen Konzepten vertraut sind, können Sie sich die [verfügbaren Entwurfsmuster](https://java-design-patterns.com/patterns/) ansehen. Dafür gibt es verschiedene Ansätze:
5135

52-
- Nach einem bestimmten Schema anhand des Namens suchen.
53-
Sie können keins finden? Bitte melden sie ein neues Schema [hier](https://github.com/iluwatar/java-design-patterns/issues).
54-
- Verwendung von Tags wie `Performance`, `Gang of Four` oder `Data access`.
55-
- Verwendung von Entwurfschema-Kategorien wie `Creational`, `Behavioral` und andere.
36+
- Suchen Sie nach einem bestimmten Muster anhand des Namens. Fehlt ein Muster? Melden Sie es gerne [hier](https://github.com/iluwatar/java-design-patterns/issues).
37+
- Nutzen Sie Tags wie `Performance`, `Gang of Four` oder `Data access`.
38+
- Durchsuchen Sie die Muster nach Kategorien wie `Creational`, `Behavioral` und anderen.
5639

57-
Hoffentlich finden sie die auf dieser Website vorgestellten objektorientierten Lösungen
58-
für ihre Architekturen nützlich und dass sie genauso viel Spaß beim Lernen haben, wie wir bei ihrer Entwicklung hatten.
40+
Wir hoffen, dass Sie die hier vorgestellten Lösungen für Ihre Projekte nützlich finden und genauso viel Spaß beim Lernen haben, wie wir bei der Entwicklung hatten.
5941

60-
# Wie man bei diesem Projekt mitwirken kann
42+
# Mitwirken
6143

62-
Wenn sie zu dem Projekt beitragen wollen, finden sie die entsprechenden Informationen in
63-
unserem [Entwickler-Wiki](https://github.com/iluwatar/java-design-patterns/wiki).mWir helfen Ihnen
64-
gerne und beantworten ihre Fragen im [Gitter chatroom](https://gitter.im/iluwatar/java-design-patterns).
44+
Wenn Sie zum Projekt beitragen möchten, finden Sie alle notwendigen Informationen in unserem [Entwickler-Wiki](https://github.com/iluwatar/java-design-patterns/wiki). Bei Fragen helfen wir Ihnen gerne im [Gitter-Chatraum](https://gitter.im/iluwatar/java-design-patterns) weiter.
6545

6646
# Lizenz
6747

68-
Dieses Projekt steht unter den Bedingungen der MIT-Lizenz.
69-
48+
Dieses Projekt steht unter der MIT-Lizenz.

0 commit comments

Comments
 (0)