Design patterns implemented in Java
Clone or download
Latest commit 9e56e5c Sep 8, 2018
Permalink
Failed to load latest commit information.
abstract-document Set version for next development iteration Mar 31, 2018
abstract-factory Set version for next development iteration Mar 31, 2018
acyclic-visitor Fixed minor changes suggested by Checkstyle Aug 21, 2018
adapter Set version for next development iteration Mar 31, 2018
aggregator-microservices Set version for next development iteration Mar 31, 2018
ambassador General cleanup. Simplifying code. Replacing all prints with appropri… Jun 23, 2018
api-gateway Set version for next development iteration Mar 31, 2018
async-method-invocation Set version for next development iteration Mar 31, 2018
balking Set version for next development iteration Mar 31, 2018
bridge Set version for next development iteration Mar 31, 2018
builder Set version for next development iteration Mar 31, 2018
business-delegate Set version for next development iteration Mar 31, 2018
caching Set version for next development iteration Mar 31, 2018
callback Set version for next development iteration Mar 31, 2018
chain Set version for next development iteration Mar 31, 2018
collection-pipeline Updated UCLS file and PNG image Sep 8, 2018
command Set version for next development iteration Mar 31, 2018
composite Set version for next development iteration Mar 31, 2018
converter Fix converter image issue Aug 20, 2018
cqrs Set version for next development iteration Mar 31, 2018
dao Set version for next development iteration Mar 31, 2018
data-bus Set version for next development iteration Mar 31, 2018
data-mapper Set version for next development iteration Mar 31, 2018
data-transfer-object Set version for next development iteration Mar 31, 2018
decorator Set version for next development iteration Mar 31, 2018
delegation Set version for next development iteration Mar 31, 2018
dependency-injection Set version for next development iteration Mar 31, 2018
dirty-flag Add license headers Jun 3, 2018
double-checked-locking Set version for next development iteration Mar 31, 2018
double-dispatch Set version for next development iteration Mar 31, 2018
eip-aggregator Set version for next development iteration Mar 31, 2018
eip-message-channel Consistent naming for EIP patterns #733 Apr 12, 2018
eip-publish-subscribe Consistent naming for EIP patterns #733 Apr 12, 2018
eip-splitter Set version for next development iteration Mar 31, 2018
eip-wire-tap Set version for next development iteration Mar 31, 2018
event-aggregator Set version for next development iteration Mar 31, 2018
event-asynchronous Set version for next development iteration Mar 31, 2018
event-driven-architecture Set version for next development iteration Mar 31, 2018
event-queue Set version for next development iteration Mar 31, 2018
event-sourcing Set version for next development iteration Mar 31, 2018
execute-around execute around lambda Sep 8, 2018
extension-objects Set version for next development iteration Mar 31, 2018
facade Set version for next development iteration Mar 31, 2018
factory-kit Set version for next development iteration Mar 31, 2018
factory-method Set version for next development iteration Mar 31, 2018
feature-toggle Set version for next development iteration Mar 31, 2018
fluentinterface Set version for next development iteration Mar 31, 2018
flux Set version for next development iteration Mar 31, 2018
flyweight Set version for next development iteration Mar 31, 2018
front-controller Set version for next development iteration Mar 31, 2018
guarded-suspension Set version for next development iteration Mar 31, 2018
half-sync-half-async Set version for next development iteration Mar 31, 2018
hexagonal Add license headers Aug 13, 2018
intercepting-filter Set version for next development iteration Mar 31, 2018
interpreter Set version for next development iteration Mar 31, 2018
iterator correcting raw types for the item Iterator. Aug 29, 2018
layers Set version for next development iteration Mar 31, 2018
lazy-loading Set version for next development iteration Mar 31, 2018
marker Set version for next development iteration Mar 31, 2018
mediator Set version for next development iteration Mar 31, 2018
memento Set version for next development iteration Mar 31, 2018
model-view-controller Set version for next development iteration Mar 31, 2018
model-view-presenter Set version for next development iteration Mar 31, 2018
module Set version for next development iteration Mar 31, 2018
monad Set version for next development iteration Mar 31, 2018
monostate Set version for next development iteration Mar 31, 2018
multiton Set version for next development iteration Mar 31, 2018
mute-idiom Set version for next development iteration Mar 31, 2018
mutex Set version for next development iteration Mar 31, 2018
naked-objects Set version for next development iteration Mar 31, 2018
null-object Set version for next development iteration Mar 31, 2018
object-mother Set version for next development iteration Mar 31, 2018
object-pool Set version for next development iteration Mar 31, 2018
observer Set version for next development iteration Mar 31, 2018
page-object Set version for next development iteration Mar 31, 2018
partial-response Set version for next development iteration Mar 31, 2018
poison-pill Set version for next development iteration Mar 31, 2018
private-class-data Set version for next development iteration Mar 31, 2018
producer-consumer Set version for next development iteration Mar 31, 2018
promise Set version for next development iteration Mar 31, 2018
property Set version for next development iteration Mar 31, 2018
prototype Set version for next development iteration Mar 31, 2018
proxy Set version for next development iteration Mar 31, 2018
queue-load-leveling Set version for next development iteration Mar 31, 2018
reactor Add Annotation 'Override' to com.iluwatar.reactor.app.AppClient.TcpLo… Jul 18, 2018
reader-writer-lock Set version for next development iteration Mar 31, 2018
repository Set version for next development iteration Mar 31, 2018
resource-acquisition-is-initialization Set version for next development iteration Mar 31, 2018
retry Fixed minor changes suggested by Checkstyle Aug 21, 2018
semaphore Set version for next development iteration Mar 31, 2018
servant Set version for next development iteration Mar 31, 2018
serverless delete the incorrect package Apr 8, 2018
service-layer Set version for next development iteration Mar 31, 2018
service-locator Set version for next development iteration Mar 31, 2018
singleton Set version for next development iteration Mar 31, 2018
specification Set version for next development iteration Mar 31, 2018
state Set version for next development iteration Mar 31, 2018
step-builder Set version for next development iteration Mar 31, 2018
strategy Set version for next development iteration Mar 31, 2018
template-method Set version for next development iteration Mar 31, 2018
thread-pool Set version for next development iteration Mar 31, 2018
throttling Disable intermittently failing test Jun 3, 2018
tls Set version for next development iteration Mar 31, 2018
tolerant-reader Set version for next development iteration Mar 31, 2018
trampoline Set version for next development iteration Mar 31, 2018
twin Set version for next development iteration Mar 31, 2018
unit-of-work Set version for next development iteration Mar 31, 2018
value-object Set version for next development iteration Mar 31, 2018
visitor Set version for next development iteration Mar 31, 2018
.gitignore Update .gitignore Sep 3, 2017
.travis.yml #674 update SonarQube analysis URL Jan 7, 2018
CODE_COVERAGE.md Correct the command for computing code coverage Apr 9, 2018
CONTRIBUTING.MD Update CONTRIBUTING.MD Dec 28, 2015
LICENSE.md Update license year from 2014 to range '2014-2016' Feb 3, 2016
PULL_REQUEST_TEMPLATE.md Update PULL_REQUEST_TEMPLATE.md Dec 9, 2017
README.md Update SonarCloud badge Mar 14, 2018
checkstyle-suppressions.xml Update license headers Nov 27, 2016
checkstyle.xml Migrate to JUnit5 Dec 31, 2017
exclude-pmd.properties Update license headers Nov 27, 2016
faq.md Added FAQ on Memento pattern Aug 20, 2016
pom.xml Merge branch 'master' into collection-pipeline Aug 1, 2018
update-ghpages.sh Update license headers Nov 27, 2016

README.md

Design patterns implemented in Java

Build status License MIT Join the chat at https://gitter.im/iluwatar/java-design-patterns Quality Gate CII Best Practices

Introduction

Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system.

Design patterns can speed up the development process by providing tested, proven development paradigms.

Reusing design patterns helps to prevent subtle issues that can cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.

Getting started

Before you dive into the material, you should be familiar with various Programming/Software Design Principles.

All designs should be as simple as possible. You should start with KISS, YAGNI, and Do The Simplest Thing That Could Possibly Work principles. Complexity and patterns should only be introduced when they are needed for practical extensibility.

Once you are familiar with these concepts you can start drilling down into patterns by any of the following approaches

  • Using difficulty tags, Difficulty-Beginner, Difficulty-Intermediate & Difficulty-Expert.
  • Using pattern categories, Creational, Behavioral and others.
  • Search for a specific pattern. Can't find one? Please report a new pattern here.

How to contribute

If you are willing to contribute to the project you will find the relevant information in our developer wiki. We will help you and answer your questions in the Gitter chatroom.

License

This project is licensed under the terms of the MIT license.