Skip to content

Content SEO updates #2990

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 175 commits into from
Jun 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
175 commits
Select commit Hold shift + click to select a range
59efc61
update yaml frontmatter format
iluwatar Jun 4, 2024
02ccf42
update abstract document
iluwatar Jun 4, 2024
de790ef
update abstract factory
iluwatar Jun 4, 2024
1002de5
use the new pattern template
iluwatar Jun 4, 2024
f66d5d4
acyclic visitor seo
iluwatar Jun 4, 2024
3fe33d8
adapter seo
iluwatar Jun 4, 2024
7cfe30a
ambassador seo
iluwatar Jun 4, 2024
bcd9560
acl seo
iluwatar Jun 4, 2024
c0d691a
aaa seo
iluwatar Jun 4, 2024
53dc877
async method invocation seo
iluwatar Jun 4, 2024
f9b076c
balking seo
iluwatar Jun 5, 2024
a972254
bridge seo
iluwatar Jun 5, 2024
b0ec857
builder seo
iluwatar Jun 5, 2024
8d1aa55
business delegate and bytecode seo
iluwatar Jun 5, 2024
d175fe1
caching seo
iluwatar Jun 5, 2024
52bd8fd
callback seo
iluwatar Jun 5, 2024
252c605
chain seo
iluwatar Jun 5, 2024
48b0f40
update headings
iluwatar Jun 5, 2024
46039f2
circuit breaker seo
iluwatar Jun 5, 2024
1435a16
client session + collecting parameter seo
iluwatar Jun 5, 2024
fbac335
collection pipeline seo
iluwatar Jun 5, 2024
0b44ffd
combinator SEO
iluwatar Jun 5, 2024
45ed2b7
command seo
iluwatar Jun 5, 2024
bd80258
cqrs seo
iluwatar Jun 5, 2024
1c090d9
commander seo
iluwatar Jun 5, 2024
139ebff
component seo
iluwatar Jun 5, 2024
ec57610
composite seo
iluwatar Jun 5, 2024
8988c42
composite entity seo
iluwatar Jun 5, 2024
32d4a62
composite view seo
iluwatar Jun 5, 2024
99c8a96
context object seo
iluwatar Jun 5, 2024
40a783c
converter seo
iluwatar Jun 5, 2024
46db0a3
crtp seo
iluwatar Jun 5, 2024
5479b40
currying seo
iluwatar Jun 5, 2024
b0ad3a3
dao seo
iluwatar Jun 5, 2024
bce151a
data bus seo
iluwatar Jun 5, 2024
b039fd0
data locality seo
iluwatar Jun 5, 2024
5a85314
data mapper seo
iluwatar Jun 5, 2024
fa23c6b
dto seo
iluwatar Jun 5, 2024
098cb44
decorator seo
iluwatar Jun 5, 2024
6da82ce
delegation seo
iluwatar Jun 5, 2024
baab330
di seo
iluwatar Jun 5, 2024
f783db8
dirty flag seo
iluwatar Jun 5, 2024
030febd
domain model seo
iluwatar Jun 5, 2024
67ce0fc
double buffer seo
iluwatar Jun 5, 2024
0a47ba7
double checked locking seo
iluwatar Jun 5, 2024
aa0df22
double dispatch seo
iluwatar Jun 5, 2024
234ace7
dynamic proxy seo
iluwatar Jun 5, 2024
bacab70
event aggregator seo
iluwatar Jun 5, 2024
ee6e3cd
event-based asynchronous seo
iluwatar Jun 5, 2024
12f694e
eda seo
iluwatar Jun 5, 2024
9c8b8fb
event queue seo
iluwatar Jun 5, 2024
127e2a9
event sourcing seo
iluwatar Jun 5, 2024
5e05d04
execute around seo
iluwatar Jun 5, 2024
403e414
extension objects seo
iluwatar Jun 5, 2024
d0a8e2e
facade seo
iluwatar Jun 5, 2024
3bf4157
factory seo
iluwatar Jun 6, 2024
5c4d426
factory kit seo
iluwatar Jun 6, 2024
a954b3b
factory method seo
iluwatar Jun 6, 2024
b87d979
fanout/fanin seo
iluwatar Jun 6, 2024
4259309
feature toggle seo
iluwatar Jun 6, 2024
7c14669
filterer seo
iluwatar Jun 6, 2024
bca6321
fluent interface seo
iluwatar Jun 6, 2024
1d0545e
flux seo
iluwatar Jun 6, 2024
9c81c97
flyweight seo
iluwatar Jun 6, 2024
4c4a491
front controller seo
iluwatar Jun 6, 2024
7953339
function composition seo
iluwatar Jun 6, 2024
1469c1d
game loop seo
iluwatar Jun 6, 2024
63b9e98
gateway seo
iluwatar Jun 6, 2024
a7b95f7
guarded suspension seo
iluwatar Jun 6, 2024
ecc26ff
half-sync/half-async seo
iluwatar Jun 6, 2024
fac73d3
health check seo
iluwatar Jun 6, 2024
7a4fe59
hexagonal seo
iluwatar Jun 6, 2024
5dc93da
identity map seo
iluwatar Jun 6, 2024
4c2a641
intercepting filter seo
iluwatar Jun 6, 2024
58a66c3
interpreter seo
iluwatar Jun 6, 2024
c0631be
iterator seo
iluwatar Jun 6, 2024
a97b61e
layers seo
iluwatar Jun 6, 2024
da5c9bf
lazy loading seo
iluwatar Jun 6, 2024
90fc3c5
leader election seo
iluwatar Jun 6, 2024
52312be
leader/followers seo
iluwatar Jun 6, 2024
046b755
lockable object seo
iluwatar Jun 6, 2024
fdbeb95
rename and add seo for marker interface
iluwatar Jun 6, 2024
403bf9a
master-worker seo
iluwatar Jun 6, 2024
692b2f6
mediator seo
iluwatar Jun 6, 2024
641bb22
memento seo
iluwatar Jun 6, 2024
2145693
metadata mapping seo
iluwatar Jun 6, 2024
95ee4cf
microservice aggregator seo
iluwatar Jun 6, 2024
79ad3d9
api gw seo
iluwatar Jun 6, 2024
c3a8c4e
microservices log aggregration seo
iluwatar Jun 6, 2024
4771c66
mvc seo
iluwatar Jun 6, 2024
6879110
mvi seo
iluwatar Jun 6, 2024
b798663
mvp seo
iluwatar Jun 6, 2024
2320a07
mvvm seo
iluwatar Jun 6, 2024
d6b0fa0
monad seo
iluwatar Jun 6, 2024
930d3ec
monitor seo
iluwatar Jun 6, 2024
fedd8a1
monostate seo
iluwatar Jun 6, 2024
e0e8c3a
multiton seo
iluwatar Jun 6, 2024
2c69bf7
mute idiom seo
iluwatar Jun 6, 2024
01eb2b9
naked objects & notification seo
iluwatar Jun 7, 2024
c21c4c5
null object seo
iluwatar Jun 7, 2024
c48f1f2
object mother seo
iluwatar Jun 7, 2024
532d5cf
object pool seo
iluwatar Jun 7, 2024
d39de39
observer seo
iluwatar Jun 7, 2024
8ceded9
optimistic locking seo
iluwatar Jun 7, 2024
3eaa61a
page controller seo
iluwatar Jun 7, 2024
259737c
page object seo
iluwatar Jun 7, 2024
08a95a2
parameter object seo
iluwatar Jun 7, 2024
d6d4ee5
partial response seo
iluwatar Jun 7, 2024
9aa825e
pipeline seo
iluwatar Jun 7, 2024
808c7fc
poison pill seo
iluwatar Jun 7, 2024
4a337fd
presentation model seo
iluwatar Jun 7, 2024
bc493d1
private class data seo
iluwatar Jun 7, 2024
51e1c7c
producer-consumer seo
iluwatar Jun 7, 2024
5446fe7
promise seo
iluwatar Jun 7, 2024
1acb958
property seo
iluwatar Jun 7, 2024
c2c2e2f
prototype seo
iluwatar Jun 7, 2024
5928c74
proxy seo
iluwatar Jun 7, 2024
148e432
queue-based load leveling seo
iluwatar Jun 7, 2024
b3342d9
reactor seo
iluwatar Jun 7, 2024
bbaa460
registry seo
iluwatar Jun 7, 2024
328f29c
repository seo
iluwatar Jun 7, 2024
dbf81d3
RAII seo
iluwatar Jun 7, 2024
a563c1b
retry seo
iluwatar Jun 7, 2024
092ec06
role object seo
iluwatar Jun 7, 2024
3bfd40d
saga seo
iluwatar Jun 7, 2024
918f973
separated interface seo
iluwatar Jun 7, 2024
9a33870
serialized entity seo
iluwatar Jun 7, 2024
e0ef0ba
serialized lob seo
iluwatar Jun 7, 2024
7297101
servant seo
iluwatar Jun 7, 2024
88d4a57
server session seo
iluwatar Jun 7, 2024
738f146
service layer seo
iluwatar Jun 7, 2024
f5f946d
service locator seo
iluwatar Jun 7, 2024
99e557e
service to worker seo
iluwatar Jun 7, 2024
2342e25
sharding seo
iluwatar Jun 7, 2024
6e3e59a
single table inheritance seo
iluwatar Jun 7, 2024
14f8ffa
singleton seo
iluwatar Jun 7, 2024
8ca1fdc
spatial partition seo
iluwatar Jun 7, 2024
c508641
special case seo
iluwatar Jun 7, 2024
f34f405
specification seo
iluwatar Jun 7, 2024
407afe1
state seo
iluwatar Jun 7, 2024
d3a666c
step builder seo
iluwatar Jun 7, 2024
b3211f0
strangler seo
iluwatar Jun 7, 2024
1fbb6f7
strategy seo
iluwatar Jun 7, 2024
273e866
subclass sandbox seo
iluwatar Jun 7, 2024
ce21695
table module seo
iluwatar Jun 7, 2024
79ce810
template method seo
iluwatar Jun 7, 2024
4f86082
throttling seo
iluwatar Jun 7, 2024
ce21342
tolerant reader seo
iluwatar Jun 7, 2024
bd5f64f
trampoline seo
iluwatar Jun 7, 2024
9006b7e
transaction script seo
iluwatar Jun 7, 2024
4048121
twin seo
iluwatar Jun 7, 2024
486feea
type object seo
iluwatar Jun 7, 2024
712a9e2
unit of work seo
iluwatar Jun 7, 2024
4519fc2
update method seo
iluwatar Jun 7, 2024
e3cbaf2
value object seo
iluwatar Jun 7, 2024
465e1dc
version number seo
iluwatar Jun 7, 2024
f523f61
virtual proxy seo
iluwatar Jun 7, 2024
bc14f8a
visitor seo
iluwatar Jun 7, 2024
7157f42
seo enhancements
iluwatar Jun 7, 2024
3fbbd9a
seo improvements
iluwatar Jun 7, 2024
65737ed
SEO enhancements
iluwatar Jun 7, 2024
cb65a3e
SEO improvements
iluwatar Jun 7, 2024
b40a308
SEO additions
iluwatar Jun 8, 2024
73bf20d
SEO improvements
iluwatar Jun 8, 2024
7960de0
more SEO improvements
iluwatar Jun 8, 2024
f458957
rename hexagonal + SEO improvements
iluwatar Jun 8, 2024
97b9617
SEO improvements
iluwatar Jun 8, 2024
7e56698
more SEO stuff
iluwatar Jun 8, 2024
e76270e
SEO improvements
iluwatar Jun 8, 2024
2132382
SEO optimizations
iluwatar Jun 8, 2024
d0d20b5
SEO enhancements
iluwatar Jun 8, 2024
da22943
enchance SEO
iluwatar Jun 8, 2024
4d9c519
improve SEO
iluwatar Jun 8, 2024
7d3e5da
SEO improvements
iluwatar Jun 8, 2024
459397e
update headers
iluwatar Jun 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 20 additions & 18 deletions abstract-document/README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@
---
title: Abstract Document
title: "Abstract Document Pattern in Java: Simplifying Data Handling with Flexibility"
shortTitle: Abstract Document
description: "Explore the Abstract Document design pattern in Java. Learn its intent, explanation, applicability, benefits, and see real-world examples to implement flexible and dynamic data structures."
category: Structural
language: en
tag:
- Abstraction
- Decoupling
- Dynamic typing
- Encapsulation
- Extensibility
- Polymorphism
- Abstraction
- Decoupling
- Dynamic typing
- Encapsulation
- Extensibility
- Polymorphism
---

## Intent
## Intent of Abstract Document Design Pattern

The Abstract Document design pattern is a structural design pattern that aims to provide a consistent way to handle hierarchical and tree-like data structures by defining a common interface for various document types. It separates the core document structure from specific data formats, enabling dynamic updates and simplified maintenance.
The Abstract Document design pattern in Java is a crucial structural design pattern that provides a consistent way to handle hierarchical and tree-like data structures by defining a common interface for various document types. It separates the core document structure from specific data formats, enabling dynamic updates and simplified maintenance.

## Explanation
## Detailed Explanation of Abstract Document Pattern with Real-World Examples

The Abstract Document pattern enables handling additional, non-static properties. This pattern uses concept of traits to enable type safety and separate properties of different classes into set of interfaces.
The Abstract Document design pattern in Java allows dynamic handling of non-static properties. This pattern uses concept of traits to enable type safety and separate properties of different classes into set of interfaces.

Real-world example

> Imagine a library system where books can have different formats and attributes: physical books, eBooks, and audiobooks. Each format has unique properties, such as page count for physical books, file size for eBooks, and duration for audiobooks. The Abstract Document design pattern allows the library system to manage these diverse formats flexibly. By using this pattern, the system can store and retrieve properties dynamically, without needing a rigid structure for each book type, making it easier to add new formats or attributes in the future without significant changes to the codebase.
> Consider a library system implementing the Abstract Document design pattern in Java, where books can have diverse formats and attributes: physical books, eBooks, and audiobooks. Each format has unique properties, such as page count for physical books, file size for eBooks, and duration for audiobooks. The Abstract Document design pattern allows the library system to manage these diverse formats flexibly. By using this pattern, the system can store and retrieve properties dynamically, without needing a rigid structure for each book type, making it easier to add new formats or attributes in the future without significant changes to the codebase.

In plain words

Expand All @@ -31,7 +33,7 @@ Wikipedia says

> 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.

**Programmatic Example**
## Programmatic Example of Abstract Document Pattern in Java

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.

Expand Down Expand Up @@ -177,13 +179,13 @@ The program output:
07:21:57.395 [main] INFO com.iluwatar.abstractdocument.App -- door/Lambo/300
```

## Class diagram
## Abstract Document Pattern Class Diagram

![Abstract Document](./etc/abstract-document.png "Abstract Document Traits and Domain")

## Applicability
## When to Use the Abstract Document Pattern in Java

This pattern is particularly useful in scenarios where you have different types of documents 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:
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:

* Content Management Systems (CMS): In a CMS, you might have various types of content such as articles, images, videos, etc. Each type of content could have shared attributes like creation date, author, and tags, while also having specific attributes like image dimensions for images or video duration for videos.

Expand All @@ -209,7 +211,7 @@ This pattern is particularly useful in scenarios where you have different types

The key idea behind the Abstract Document design pattern is to provide a flexible and extensible way to manage different types of documents or entities with shared and distinct attributes. By defining a common interface and implementing it across various document types, you can achieve a more organized and consistent approach to handling complex data structures.

## Consequences
## Benefits and Trade-offs of Abstract Document Pattern

Benefits:

Expand All @@ -227,7 +229,7 @@ Trade-offs:

* Performance: Might introduce slight performance overhead compared to direct data access.

## Credits
## References and Credits

* [Design Patterns: Elements of Reusable Object-Oriented Software](https://amzn.to/3w0pvKI)
* [Java Design Patterns: A Hands-On Experience with Real-World Examples](https://amzn.to/3yhh525)
Expand Down
42 changes: 22 additions & 20 deletions abstract-factory/README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
---
title: Abstract Factory
title: "Abstract Factory Pattern in Java: Mastering Object Creation Elegantly"
shortTitle: Abstract Factory
description: "Learn the Abstract Factory pattern in Java with real-world examples, class diagrams, and tutorials. Understand its intent, applicability, benefits, and known uses to enhance your design pattern knowledge."
category: Creational
language: en
tag:
- Abstraction
- Decoupling
- Gang of Four
- Instantiation
- Polymorphism
- Abstraction
- Decoupling
- Gang of Four
- Instantiation
- Polymorphism
---

## Also known as

* Kit

## Intent
## Intent of Abstract Factory Design Pattern

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
The Abstract Factory pattern in Java provides an interface for creating families of related or dependent objects without specifying their concrete classes, enhancing modularity and flexibility in software design.

## Explanation
## Detailed Explanation of Abstract Factory Pattern with Real-World Examples

Real-world example

> Imagine a furniture company that produces various styles of furniture: modern, Victorian, and rustic. Each style includes products like chairs, tables, and sofas. To ensure consistency within each style, the company uses an Abstract Factory pattern.
> Imagine a furniture company that uses the Abstract Factory pattern in Java to produce various styles of furniture: modern, Victorian, and rustic. Each style includes products like chairs, tables, and sofas. To ensure consistency within each style, the company uses an Abstract Factory pattern.
>
> In this scenario, the Abstract Factory is an interface for creating families of related furniture objects (chairs, tables, sofas). Each concrete factory (ModernFurnitureFactory, VictorianFurnitureFactory, RusticFurnitureFactory) implements the Abstract Factory interface and creates a set of products that match the specific style. This way, clients can create a whole set of modern or Victorian furniture without worrying about the details of their instantiation. This maintains a consistent style and allows easy swapping of one style of furniture for another.

Expand All @@ -34,9 +36,9 @@ Wikipedia says

> The abstract factory pattern provides a way to encapsulate a group of individual factories that have a common theme without specifying their concrete classes

**Programmatic Example**
## Programmatic Example of Abstract Factory in Java

To create a kingdom 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.
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.

Translating the kingdom example above. First of all, we have some interfaces and implementation for the objects in the kingdom.

Expand Down Expand Up @@ -163,13 +165,13 @@ The program output:
07:35:46.343 [main] INFO com.iluwatar.abstractfactory.App -- This is the orc king!
```

## Class diagram
## Abstract Factory Pattern Class Diagram

![Abstract Factory](./etc/abstract-factory.urm.png "Abstract Factory class diagram")

## Applicability
## When to Use the Abstract Factory Pattern in Java

Use the Abstract Factory pattern when:
Use the Abstract Factory pattern in Java when:

* The system should be independent of how its products are created, composed, and represented.
* You need to configure the system with one of multiple families of products.
Expand All @@ -180,12 +182,12 @@ Use the Abstract Factory pattern when:
* You need to choose which product to use from a family at runtime.
* Adding new products or families should not require changes to existing code.

## Tutorials
## Abstract Factory Pattern Java Tutorials

* [Abstract Factory Design Pattern in Java (DigitalOcean)](https://www.digitalocean.com/community/tutorials/abstract-factory-design-pattern-in-java)
* [Abstract Factory(Refactoring Guru)](https://refactoring.guru/design-patterns/abstract-factory)

## Consequences
## Benefits and Trade-offs of Abstract Factory Pattern

Benefits:

Expand All @@ -203,21 +205,21 @@ Trade-offs:

* Indirectness: Client code interacts with products indirectly through factories, potentially reducing transparency.

## Known uses
## Real-World Applications of Abstract Factory Pattern in Java

* Java Swing's `LookAndFeel` classes for providing different look-and-feel options.
* Various implementations in the Java Abstract Window Toolkit (AWT) for creating different GUI components.
* [javax.xml.parsers.DocumentBuilderFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilderFactory.html)
* [javax.xml.transform.TransformerFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/transform/TransformerFactory.html#newInstance--)
* [javax.xml.xpath.XPathFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/xpath/XPathFactory.html#newInstance--)

## Related patterns
## Related Java Design Patterns

* [Factory Method](https://java-design-patterns.com/patterns/factory-method/): Abstract Factory uses Factory Methods to create products.
* [Singleton](https://java-design-patterns.com/patterns/singleton/): Abstract Factory classes are often implemented as Singletons.
* [Factory Kit](https://java-design-patterns.com/patterns/factory-kit/): Similar to Abstract Factory but focuses on configuring and managing a set of related objects in a flexible way.

## Credits
## References and Credits

* [Design Patterns: Elements of Reusable Object-Oriented Software](https://amzn.to/3w0pvKI)
* [Design Patterns in Java](https://amzn.to/3Syw0vC)
Expand Down
42 changes: 25 additions & 17 deletions active-object/README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
---
title: Active Object
title: "Active Object Pattern in Java: Achieving Efficient Asynchronous Processing"
shortTitle: Active Object
description: "Learn about the Active Object design pattern in Java. This guide covers asynchronous behavior, concurrency, and practical examples to enhance your Java applications' performance."
category: Concurrency
language: en
tag:
- Asynchronous
- Decoupling
- Messaging
- Synchronization
- Thread management
- Asynchronous
- Decoupling
- Messaging
- Synchronization
- Thread management
---

## Intent
## Intent of Active Object Design Pattern

The Active Object design pattern provides a safe and reliable way to implement asynchronous behavior in concurrent systems. It achieves this by encapsulating tasks within objects that have their own thread and message queue. This separation keeps the main thread responsive and avoids issues like direct thread manipulation or shared state access.
The Active Object pattern provides a reliable method for asynchronous processing in Java, ensuring responsive applications and efficient thread management. It achieves this by encapsulating tasks within objects that have their own thread and message queue. This separation keeps the main thread responsive and avoids issues like direct thread manipulation or shared state access.

## Explanation
## Detailed Explanation of Active Object Pattern with Real-World Examples

Real-world example

Expand All @@ -39,7 +41,9 @@ Wikipedia says
> * The implementation of the active object method.
> * A callback or variable for the client to receive the result.

**Programmatic Example**
## Programmatic Example of Active Object in Java

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

The Orcs are known for their wildness and untameable soul. It seems like they have their own thread of control based on previous behavior. To implement a creature that has its own thread of control mechanism and expose its API only and not the execution itself, we can use the Active Object pattern.

Expand Down Expand Up @@ -162,24 +166,28 @@ Program output:
09:00:02.504 [Thread-2] INFO com.iluwatar.activeobject.ActiveCreature -- Orc2 has started to roam in the wastelands.
```

## Applicability
## When to Use the Active Object Pattern in Java

Use the Active Object pattern in Java when:

* When you need to perform long-running operations without blocking the main thread.
* when you need to handle asynchronous tasks without blocking the main thread, ensuring better performance and responsiveness.
* When you need to interact with external resources asynchronously.
* When you want to improve the responsiveness of your application.
* When you need to manage concurrent tasks in a modular and maintainable way.

## Tutorials
## Active Object Pattern Java Tutorials

* [Android and Java Concurrency: The Active Object Pattern(Douglas Schmidt)](https://www.youtube.com/watch?v=Cd8t2u5Qmvc)

## Known Uses
## Real-World Applications of Active Object Pattern in Java

* Real-time trading systems where transaction requests are handled asynchronously.
* GUIs where long-running tasks are executed in the background without freezing the user interface.
* Game programming to handle concurrent updates to game state or AI computations.

## Consequences
## Benefits and Trade-offs of Active Object Pattern

Discover the benefits and trade-offs of using the Active Object pattern in Java, including improved thread safety and potential overhead concerns.

Benefits:

Expand All @@ -193,13 +201,13 @@ Trade-offs:
* Introduces additional overhead due to message passing and thread management.
* May not be suitable for all types of concurrency problems.

## Related patterns
## Related Java Design Patterns

* [Command](https://java-design-patterns.com/patterns/command/): Encapsulates a request as an object, similarly to how the Active Object pattern encapsulates method calls.
* [Promise](https://java-design-patterns.com/patterns/promise/): Provides a means to retrieve the result of an asynchronous method call, often used in conjunction with Active Object.
* [Proxy](https://java-design-patterns.com/patterns/proxy/): The Active Object pattern can use a proxy to handle method invocations asynchronously.

## Credits
## References and Credits

* [Design Patterns: Elements of Reusable Object Software](https://amzn.to/3HYqrBE)
* [Concurrent Programming in Java: Design Principles and Patterns](https://amzn.to/498SRVq)
Expand Down
Loading
Loading