+
+
+
+
+
diff --git a/abstract-document/README.md b/abstract-document/README.md
index 2adb3732b822..56f8e775c676 100644
--- a/abstract-document/README.md
+++ b/abstract-document/README.md
@@ -1,29 +1,247 @@
---
-layout: pattern
-title: Abstract Document
-folder: abstract-document
-permalink: /patterns/abstract-document/
-categories: Structural
-tags:
- - Java
- - Difficulty-Intermediate
+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
---
-## Intent
-Achieve flexibility of untyped languages and keep the type-safety
+## Intent of Abstract Document Design Pattern
-
+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.
+## Detailed Explanation of Abstract Document Pattern with Real-World Examples
-## Applicability
-Use the Abstract Document Pattern when
+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.
-* there is a need to add new properties on the fly
-* you want a flexible way to organize domain in tree like structure
-* you want more loosely coupled system
+Real-world example
+> 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.
-## Credits
+In plain words
-* [Wikipedia: Abstract Document Pattern](https://en.wikipedia.org/wiki/Abstract_Document_Pattern)
-* [Martin Fowler: Dealing with properties](http://martinfowler.com/apsupp/properties.pdf)
\ No newline at end of file
+> Abstract Document pattern allows attaching properties to objects without them knowing about it.
+
+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.
+
+Class diagram
+
+
+
+
+## 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.
+
+Let's first define the base classes `Document` and `AbstractDocument`. They basically make the object hold a property map and any amount of child objects.
+
+```java
+public interface Document {
+
+ Void put(String key, Object value);
+
+ Object get(String key);
+
+ Stream children(String key, Function