---
layout: pattern
title: Abstract Document
folder: abstract-document
permalink: /patterns/abstract-document/
pumlid: PSjB3eCm34NHhPG599vtDyQn85L-ifzX-p3lxEf8Twj3MXGDQvyJMFubChxpKN767gucSq07iinEjSNDOACVNvoAUZr6MWoe3QVE_WRnxZ0Mf38b-hkIGlurX_MyehS7
categories: Structural
tags: 
 - Java
 - Difficulty-Intermediate
---

## Intent
Achieve flexibility of untyped languages and keep the type-safety 

![alt text](./etc/abstract-document-base.png "Abstract Document Base")

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


## Applicability
Use the Abstract Document Pattern when

* 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


## Credits

* [Wikipedia: Abstract Document Pattern](https://en.wikipedia.org/wiki/Abstract_Document_Pattern)
* [Martin Fowler: Dealing with properties](http://martinfowler.com/apsupp/properties.pdf)