The Wayback Machine - https://web.archive.org/web/20181102155807/https://github.com/iluwatar/java-design-patterns
Skip to content
Design patterns implemented in Java http://java-design-patterns.com
Clone or download
pmatejko and npathai Hexagonal pattern fixes (#814)
* Fixed wrong else condition

* Simplified creating Set of numbers

* Deleted unused imports

* Replaced 'for' loop with 'foreach' one

* Replaced explicit type with diamond

* Removed unnecesary brackets from lambda

* Removed unnecesary contains check before adding element to Set

* Fixed typo and changed non-english constant names
Latest commit 4446e74 Oct 27, 2018
Permalink
Failed to load latest commit information.
abstract-document Minor refactorings and code style changes (#807) Oct 23, 2018
abstract-factory Set version for next development iteration Sep 30, 2018
acyclic-visitor Minor refactorings and code style changes (#807) Oct 23, 2018
adapter Set version for next development iteration Sep 30, 2018
aggregator-microservices Minor refactorings and code style changes (#807) Oct 23, 2018
ambassador Refactoring changes in Ambassador Pattern (#805) Oct 21, 2018
api-gateway Set version for next development iteration Sep 30, 2018
async-method-invocation Set version for next development iteration Sep 30, 2018
balking Intermittent failure was due to Thread.sleep in the code. While perfo… Oct 15, 2018
bridge Minor refactorings and code style changes (#807) Oct 23, 2018
builder Set version for next development iteration Sep 30, 2018
business-delegate Set version for next development iteration Sep 30, 2018
caching Set version for next development iteration Sep 30, 2018
callback Minor refactorings and code style changes (#807) Oct 23, 2018
chain Minor refactorings and code style changes (#807) Oct 23, 2018
collection-pipeline Minor refactorings and code style changes (#807) Oct 23, 2018
command Set version for next development iteration Sep 30, 2018
composite Set version for next development iteration Sep 30, 2018
converter Minor refactorings and code style changes (#807) Oct 23, 2018
cqrs Minor refactorings and code style changes (#807) Oct 23, 2018
dao Minor refactorings and code style changes (#807) Oct 23, 2018
data-bus Set version for next development iteration Sep 30, 2018
data-mapper Minor refactorings and code style changes (#807) Oct 23, 2018
data-transfer-object Minor refactorings and code style changes (#807) Oct 23, 2018
decorator - Assign ClubberTroll to another variable in README Oct 15, 2018
delegation Minor refactorings and code style changes (#807) Oct 23, 2018
dependency-injection Set version for next development iteration Sep 30, 2018
dirty-flag Minor refactorings and code style changes (#807) Oct 23, 2018
double-checked-locking Set version for next development iteration Sep 30, 2018
double-dispatch Set version for next development iteration Sep 30, 2018
eip-aggregator Minor refactorings and code style changes (#807) Oct 23, 2018
eip-message-channel Minor refactorings and code style changes (#807) Oct 23, 2018
eip-publish-subscribe Minor refactorings and code style changes (#807) Oct 23, 2018
eip-splitter Set version for next development iteration Sep 30, 2018
eip-wire-tap Set version for next development iteration Sep 30, 2018
event-aggregator Minor refactorings and code style changes (#807) Oct 23, 2018
event-asynchronous Minor refactorings and code style changes (#807) Oct 23, 2018
event-driven-architecture Set version for next development iteration Sep 30, 2018
event-queue Refactored Event Queue (#806) Oct 21, 2018
event-sourcing Minor refactorings and code style changes (#807) Oct 23, 2018
execute-around Minor refactorings and code style changes (#807) Oct 23, 2018
extension-objects Minor refactorings and code style changes (#807) Oct 23, 2018
facade Set version for next development iteration Sep 30, 2018
factory-kit Minor refactorings and code style changes (#807) Oct 23, 2018
factory-method Set version for next development iteration Sep 30, 2018
feature-toggle Minor refactorings and code style changes (#807) Oct 23, 2018
fluentinterface Minor refactorings and code style changes (#807) Oct 23, 2018
flux Set version for next development iteration Sep 30, 2018
flyweight Set version for next development iteration Sep 30, 2018
front-controller Minor refactorings and code style changes (#807) Oct 23, 2018
guarded-suspension Minor refactorings and code style changes (#807) Oct 23, 2018
half-sync-half-async Minor refactorings and code style changes (#807) Oct 23, 2018
hexagonal Hexagonal pattern fixes (#814) Oct 27, 2018
intercepting-filter Minor refactorings and code style changes (#807) Oct 23, 2018
interpreter Set version for next development iteration Sep 30, 2018
iterator Minor refactorings and code style changes (#807) Oct 23, 2018
layers Minor refactorings and code style changes (#807) Oct 23, 2018
lazy-loading Minor refactorings and code style changes (#807) Oct 23, 2018
marker Set version for next development iteration Sep 30, 2018
mediator Set version for next development iteration Sep 30, 2018
memento Set version for next development iteration Sep 30, 2018
model-view-controller Set version for next development iteration Sep 30, 2018
model-view-presenter Set version for next development iteration Sep 30, 2018
module Minor refactorings and code style changes (#807) Oct 23, 2018
monad Set version for next development iteration Sep 30, 2018
monostate Minor refactorings and code style changes (#807) Oct 23, 2018
multiton Set version for next development iteration Sep 30, 2018
mute-idiom Minor refactorings and code style changes (#807) Oct 23, 2018
mutex Set version for next development iteration Sep 30, 2018
naked-objects Fix blocker issues on Sonar #508 (#810) Oct 25, 2018
null-object Minor refactorings and code style changes (#807) Oct 23, 2018
object-mother Minor refactorings and code style changes (#807) Oct 23, 2018
object-pool Minor refactorings and code style changes (#807) Oct 23, 2018
observer Minor refactorings and code style changes (#807) Oct 23, 2018
page-object Refactor Page-object pattern (#812) Oct 24, 2018
partial-response Set version for next development iteration Sep 30, 2018
poison-pill Minor refactorings and code style changes (#807) Oct 23, 2018
private-class-data Set version for next development iteration Sep 30, 2018
producer-consumer Minor refactorings and code style changes (#807) Oct 23, 2018
promise Minor refactorings and code style changes (#807) Oct 23, 2018
property Minor refactorings and code style changes (#807) Oct 23, 2018
prototype Minor refactorings and code style changes (#807) Oct 23, 2018
proxy Set version for next development iteration Sep 30, 2018
queue-load-leveling Minor refactorings and code style changes (#807) Oct 23, 2018
reactor Set version for next development iteration Sep 30, 2018
reader-writer-lock Set version for next development iteration Sep 30, 2018
repository Minor refactorings and code style changes (#807) Oct 23, 2018
resource-acquisition-is-initialization Set version for next development iteration Sep 30, 2018
retry Minor refactorings and code style changes (#807) Oct 23, 2018
semaphore Minor refactorings and code style changes (#807) Oct 23, 2018
servant Minor refactorings and code style changes (#807) Oct 23, 2018
serverless Minor refactorings and code style changes (#807) Oct 23, 2018
service-layer Minor refactorings and code style changes (#807) Oct 23, 2018
service-locator Set version for next development iteration Sep 30, 2018
singleton Set version for next development iteration Sep 30, 2018
specification Minor refactorings and code style changes (#807) Oct 23, 2018
state Set version for next development iteration Sep 30, 2018
step-builder Set version for next development iteration Sep 30, 2018
strategy Remove redundant Exception from throws list in DragonSlayerTest Oct 15, 2018
template-method Set version for next development iteration Sep 30, 2018
thread-pool Set version for next development iteration Sep 30, 2018
throttling Resolves #643, test cases failed due to global state in CallsCount (#803 Oct 21, 2018
tls Minor refactorings and code style changes (#807) Oct 23, 2018
tolerant-reader Minor refactorings and code style changes (#807) Oct 23, 2018
trampoline Minor refactorings and code style changes (#807) Oct 23, 2018
twin Minor refactorings and code style changes (#807) Oct 23, 2018
unit-of-work Minor refactorings and code style changes (#807) Oct 23, 2018
value-object Set version for next development iteration Sep 30, 2018
visitor Minor refactorings and code style changes (#807) Oct 23, 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 Remove CII best practices badge Oct 13, 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 Refactor Page-object pattern (#812) Oct 24, 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

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.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.