Design patterns implemented in Java

Overview

Design patterns implemented in Java

Java CI License MIT Lines of Code Coverage Join the chat at https://gitter.im/iluwatar/java-design-patterns

All Contributors


Read in different language : CNCN, KRKR, FRFR, TRTR, ARAR


Introduction

Design patterns are the best formalized practices a 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 help prevent subtle issues that cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.

Getting started

This site showcases Java Design Patterns. The solutions have been developed by experienced programmers and architects from the open source community. The patterns can be browsed by their high level descriptions or by looking at their source code. The source code examples are well commented and can be thought as programming tutorials on how to implement a specific pattern. We use the most popular battle-proven open source Java technologies.

Before you dive into the material, you should be familiar with various 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 the available design patterns by any of the following approaches

  • Search for a specific pattern by name. Can't find one? Please report a new pattern here.
  • Using tags such as Performance, Gang of Four or Data access.
  • Using pattern categories, Creational, Behavioral, and others.

Hopefully you find the object oriented solutions presented on this site useful in your architectures and have as much fun learning them as we had developing them.

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.

Contributors


Ilkka SeppΓ€lΓ€

πŸ“† 🚧 πŸ–‹

amit1307

πŸ’»

Narendra Pathai

πŸ’» πŸ€” πŸ‘€

Jeroen Meulemeester

πŸ’»

Joseph McCarthy

πŸ’»

Thomas

πŸ’»

Anurag Agarwal

πŸ’»

Markus Moser

🎨 πŸ’» πŸ€”

Sabiq Ihab

πŸ’»

Amit Dixit

πŸ’»

Piyush Kailash Chaudhari

πŸ’»

joshzambales

πŸ’»

Kamil Pietruszka

πŸ’»

Zafar Khaydarov

πŸ’» πŸ“–

Paul Campbell

πŸ’»

Argyro Sioziou

πŸ’»

TylerMcConville

πŸ’»

saksham93

πŸ’»

nikhilbarar

πŸ’»

Colin But

πŸ’»

Ruslan

πŸ’»

Juho Kang

πŸ’»

Dheeraj Mummareddy

πŸ’»

Bernardo Sulzbach

πŸ’»

Aleksandar Dudukovic

πŸ’»

Yusuf Aytaş

πŸ’»

MihΓ‘ly Kuprivecz

πŸ’»

Stanislav Kapinus

πŸ’»

GVSharma

πŸ’»

Srđan Paunović

πŸ’»

Petros G. Sideris

πŸ’»

Pramod Gupta

πŸ‘€

Amarnath Chandana

πŸ’»

Anurag870

πŸ’» πŸ“–

Wes Gilleland

πŸ’»

Harshraj Thakor

πŸ’»

Martin Vandenbussche

πŸ’»

Alexandru Somai

πŸ’»

Artur Mogozov

πŸ’»

anthony

πŸ’»

Christian Cygnus

πŸ’»

Dima Gubin

πŸ’»

Joshua Jimenez

πŸ’»

Kai Winter

πŸ’»

lbroman

πŸ’»

Przemek

πŸ’»

Prafful Agarwal

πŸ–‹

Sanket Panhale

πŸ–‹

staillebois

πŸ’»

KrisztiΓ‘n Nagy

πŸ’»

Alexander Ivanov

πŸ’»

Yosfik Alqadri

πŸ’»

AgustΓ­ Becerra MilΓ 

πŸ’»

Juan Manuel SuΓ‘rez

πŸ’»

Luigi Cortese

πŸ’»

Katarzyna Rzepecka

πŸ’»

adamski.pro

πŸ’»

Shengli Bai

πŸ’»

Boris

πŸ’»

Dmitry Avershin

πŸ’»

靳阳

πŸ’»

hoangnam2261

πŸ’»

Arpit Jain

πŸ’»

JΓ³n Ingi SveinbjΓΆrnsson

πŸ’»

Kirill Vlasov

πŸ’»

Mitchell Irvin

πŸ’»

Ranjeet

πŸ’»

PhoenixYip

πŸ’»

M Saif Asif

πŸ’»

kanwarpreet25

πŸ’»

Leon Mak

πŸ’»

Per Wramdemark

πŸ’»

Evan Sia Wai Suan

πŸ’»

AnaghaSasikumar

πŸ’»

Christoffer Hamberg

πŸ’»

Dominik Gruntz

πŸ’»

Hannes

πŸ’»

Leo GutiΓ©rrez RamΓ­rez

πŸ’»

Zhang WH

πŸ’»

Christopher O'Connell

πŸ’»

George Mavroeidis

πŸ’»

Hemant Bothra

πŸ’» 🎨

Kevin Peters

πŸ’»

George Aristy

πŸ’»

Mahendran Mookkiah

πŸ’»

Azureyjt

πŸ’»

gans

πŸ’»

Matt

πŸ–‹

Gopinath Langote

πŸ’»

Hoswey

πŸ’»

Amit Pandey

πŸ’»

gwildor28

πŸ–‹

η”°ζ΅©

πŸ–‹

Stamatis Pitsios

πŸ’»

qza

πŸ’»

Rodolfo Forte

πŸ–‹

Ankur Kaushal

πŸ’»

Ovidijus Okinskas

πŸ’»

Robert Kasperczyk

πŸ’»

Tapio Rautonen

πŸ’»

Yuri Orlov

πŸ’»

Varun Upadhyay

πŸ’»

Aditya Pal

πŸ’»

grzesiekkedzior

πŸ’» πŸ‘€

Sivasubramani M

πŸ’»

Sami Airaksinen

πŸ’»

Janne Sinivirta

πŸ’»

Boris-Chengbiao Zhou

πŸ–‹

Jacob Hein

πŸ–‹

Richard Jones

πŸ–‹

Rachel M. Carmena

πŸ–‹

Zaerald Denze Lungos

πŸ–‹

Lars Kappert

πŸ–‹

Mike Liu

🌍

Matt Dolan

πŸ’» πŸ‘€

Manan

πŸ‘€

Nishant Arora

πŸ’»

Peeyush

πŸ’»

Rakesh

πŸ’» πŸ‘€

Wei Seng

πŸ’»

Ashish Trivedi

πŸ’»

ζ΄ͺ月阳

πŸ’»

xdvrx1

πŸ‘€ πŸ€”

Subhrodip Mohanta

πŸ’» πŸ‘€

Bethan Palmer

πŸ’»

Toxic Dreamz

πŸ’»

Edy Cu Tjong

πŸ“–

MichaΕ‚ KrzywaΕ„ski

πŸ’»

Stefan Birkner

πŸ’»

Fedor Skvorcov

πŸ’»

samilAyoub

πŸ’»

Vladislav Golubinov

πŸ’»

Swaraj

πŸ’»

Christoph Flick

πŸ“–

AscΓͺnio

πŸ‘€

Domenico Sibilio

πŸ“–

Akash Chandwani

πŸ‘€

Pavlo Manannikov

πŸ’»

Eiman

πŸ’»

Rocky

πŸ“–

Ibrahim ali abdelghany

πŸ‘€

Girish Kulkarni

πŸ“–

Omar Karazoun

πŸ’»

Jeff Evans

πŸ’»

Vivek Singh

πŸ’»

siavash

πŸ’»

ruchpeanuts

πŸ“–

warp125

🌍

KHADIR Tayeb

🌍

ignite1771

πŸ’»

Halil Demir

🌍

Rohit Singh

πŸ’»

byoungju94

πŸ’»

Moustafa Farhat

🌍

Martel Richard

πŸ’»

va1m

πŸ’»
Comments
  • SonarCloud reports issues

    SonarCloud reports issues

    The project is using SonarCloud static code analysis. The latest results are showing that it has found several blockers and critical severity code smells (major, minor, and info level we ignore). In this task, those are fixed or marked as false positives. To mark false positives, SuppressWarnings annotation should be used in code as explained in the linked documentation.

    Links: Blocker and critical severity code smells in SonarCloud Sonar false positives


    Note: When Submitting a PR please provide a hyperlinked list of all the issues that you are issuing a fix for. See this example

    type: bug info: good first issue type: refactoring epic: code quality 
    opened by iluwatar 43
  • Explanation for design patterns

    Explanation for design patterns

    We want to present the design patterns better as the current does not reach its goal of explaining how the pattern works in a simplest possible way. I'm hugely inspired by https://github.com/kamranahmedse/design-patterns-for-humans repository.

    Let's do this by adding 'Explanation' section to the patterns' README.md file. For an example see http://java-design-patterns.com/patterns/bridge/.

    Let's track the issue progress here with the following checklist that indicates the patterns where explanation section is already available.

    • [x] abstract-document
    • [x] abstract-factory
    • [x] active-object
    • [x] acyclic-visitor
    • [x] adapter
    • [x] aggregator-microservices
    • [x] ambassador
    • [x] api-gateway
    • [x] arrange-act-assert
    • [x] async-method-invocation
    • [x] balking
    • [x] bridge
    • [x] builder
    • [x] business-delegate
    • [x] bytecode
    • [x] caching
    • [x] callback
    • [x] chain
    • [x] circuit-breaker
    • [x] cloud-static-content-hosting
    • [ ] collection-pipeline
    • [ ] combinator
    • [x] command
    • [ ] commander
    • [x] composite
    • [x] composite-entity
    • [x] converter
    • [ ] cqrs
    • [x] dao
    • [ ] data-bus
    • [ ] data-locality
    • [ ] data-mapper
    • [x] data-transfer-object
    • [x] decorator
    • [ ] delegation
    • [x] dependency-injection
    • [ ] dirty-flag
    • [ ] double-buffer
    • [ ] double-checked-locking
    • [ ] double-dispatch
    • [ ] eip-aggregator
    • [ ] eip-message-channel
    • [ ] eip-publish-subscribe
    • [ ] eip-splitter
    • [ ] eip-wire-tap
    • [ ] event-aggregator
    • [ ] event-based-asynchronous
    • [ ] event-driven-architecture
    • [ ] event-queue
    • [ ] event-sourcing
    • [x] execute-around
    • [ ] extension-objects
    • [x] facade
    • [x] factory
    • [ ] factory-kit
    • [x] factory-method
    • [ ] fan-out-fan-in
    • [ ] feature-toggle
    • [x] filterer
    • [x] fluentinterface
    • [ ] flux
    • [x] flyweight
    • [ ] front-controller
    • [x] game-loop
    • [ ] guarded-suspension
    • [ ] half-sync-half-async
    • [ ] hexagonal
    • [ ] intercepting-filter
    • [x] interpreter
    • [x] iterator
    • [x] layers
    • [ ] lazy-loading
    • [ ] leader-election
    • [ ] leader-followers
    • [x] lockable-object
    • [ ] marker-interface
    • [ ] master-worker
    • [x] mediator
    • [x] memento
    • [ ] model-view-controller
    • [ ] model-view-presenter
    • [x] model-view-viewmodel
    • [ ] module
    • [ ] monad
    • [ ] monostate
    • [x] multiton
    • [ ] mute-idiom
    • [ ] naked-objects
    • [x] null-object
    • [ ] object-mother
    • [x] object-pool
    • [x] observer
    • [ ] page-object
    • [x] parameter-object
    • [ ] partial-response
    • [x] pipeline
    • [x] poison-pill
    • [x] presentation-model
    • [x] priority-queue
    • [x] private-class-data
    • [ ] producer-consumer
    • [x] promise
    • [ ] property
    • [x] prototype
    • [x] proxy
    • [ ] queue-based-load-leveling
    • [ ] reactor
    • [ ] reader-writer-lock
    • [x] registry
    • [x] repository
    • [ ] resource-acquisition-is-initialization
    • [x] retry
    • [ ] role-object
    • [ ] saga
    • [ ] semaphore
    • [x] separated-interface
    • [ ] servant
    • [ ] serverless
    • [ ] service-layer
    • [ ] service-locator
    • [ ] sharding
    • [x] singleton
    • [x] spatial-partition
    • [x] special-case
    • [x] specification
    • [x] state
    • [ ] step-builder
    • [ ] strangler
    • [x] strategy
    • [ ] subclass-sandbox
    • [x] table-module
    • [x] template-method
    • [x] thread-pool
    • [x] throttling
    • [ ] thread-local-storage
    • [x] tolerant-reader
    • [x] trampoline
    • [x] transaction-script
    • [x] twin
    • [ ] type-object
    • [x] unit-of-work
    • [ ] update-method
    • [ ] value-object
    • [x] version-number
    • [x] visitor
    info: help wanted epic: pattern type: enhancement epic: web site info: good first issue info: needs splitting epic: design 
    opened by iluwatar 40
  • Translation to other languages

    Translation to other languages

    #I think this is a very nice repo to learn java design patterns.But as I see, there still no translations for other languages.So I want to join this repo and translate this into chinese if It's possible.(I' m a Chinese)

    epic: web site info: needs splitting epic: architecture type: feature 
    opened by xiaod-dev 30
  • Attach tutorial links to patterns

    Attach tutorial links to patterns

    In the pattern template there is section for Tutorials. Here we should list tutorials explaining the pattern. One example is here http://java-design-patterns.com/patterns/hexagonal/.

    epic: pattern type: enhancement info: good first issue 
    opened by iluwatar 29
  • Checkstyle reports warnings

    Checkstyle reports warnings

    In issue https://github.com/iluwatar/java-design-patterns/issues/1016 we switched using Checkstyle's builtin google_checks.xml. The new ruleset finds over 6k warnings. In this issue we try fix those gradually, one pattern at a time. If you want to help, please comment on the issue which patterns will you be working on. We will follow the progress using the following table.

    [x] abstract-document [x] abstract-factory [x] acyclic-visitor [x] adapter [x] aggregator-microservices [x] ambassador [x] api-gateway [x] async-method-invocation [x] balking [x] bridge [x] builder [x] business-delegate [x] bytecode [x] caching [x] callback [x] chain [x] circuit breaker [x] collection-pipeline [x] command [x] commander [x] composite [x] converter [x] cqrs [x] dao [x] data-bus [x] data-locality [x] data-mapper [x] data-transfer-object [x] decorator [x] delegation [x] dependency-injection [x] dirty-flag [x] double-checked-locking [x] double-dispatch [x] eip-aggregator [x] eip-message-channel [x] eip-publish-subscribe [x] eip-splitter [x] eip-wire-tap [x] event-aggregator [x] event-asynchronous [x] event-driven-architecture [x] event-queue [x] event-sourcing [x] execute-around [x] extension-objects [x] facade [x] factory-kit [x] factory-method [x] feature-toggle [x] fluentinterface [x] flux [x] flyweight [x] front-controller [x] guarded-suspension [x] half-sync-half-async [x] hexagonal [x] intercepting-filter [x] interpreter [x] iterator [x] layers [x] lazy-loading [x] leader-election [x] marker [x] master-worker-pattern [x] mediator [x] memento [x] model-view-controller [x] model-view-presenter [x] module [x] monad [x] monostate [x] multiton [x] mute-idiom [x] mutex [x] naked-objects [x] null-object [x] object-mother [x] object-pool [x] observer [x] page-object [x] partial-response [x] pipeline [x] poison-pill [x] priority-queue [x] private-class-data [x] producer-consumer [x] promise [x] property [x] prototype [x] proxy [x] queue-load-leveling [x] reactor [x] reader-writer-lock [x] repository [x] resource-acquisition-is-initialization [x] retry [x] semaphore [x] servant [x] serverless [x] service-layer [x] service-locator [x] singleton [x] spatial-partition [x] specification [x] state [x] step-builder [x] strategy [x] template-method [x] thread-pool [x] throttling [x] tls [x] tolerant-reader [x] trampoline [x] twin [x] typeobjectpattern [x] unit-of-work [x] value-object [x] visitor

    Links: https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml https://google.github.io/styleguide/javaguide.html

    info: help wanted info: good first issue type: refactoring epic: code quality 
    opened by iluwatar 28
  • Accepting presentations for the design patterns

    Accepting presentations for the design patterns

    @iluwatar What do u think if we create presentations for these nice collections of design patterns. Either one for each for one for all. Something based on impress.js or similar would be great I think. Happy to contribute. Kiitos

    info: help wanted type: enhancement info: needs splitting resolution: won't fix 
    opened by zafarella 26
  • Java 11 support: Utilize new methods

    Java 11 support: Utilize new methods

    This task is part of the Java 11 transition plan https://github.com/iluwatar/java-design-patterns/wiki/16.-Java-11-Transition

    This is a refactoring ticket where we start to utilize new Java 11 functionality.

    1. Collecting to unmodifiable collections is possible using the new Collector for Streams operations to put the results into an immutable collection (see https://www.infoq.com/articles/upgrading-java-8-to-12/)

    2. Predicate::not provides an easy way to negate predicate lambdas or method references, again reducing the boilerplate in our code (see https://www.infoq.com/articles/upgrading-java-8-to-12/)

    3. New methods on Optional give even more options for coding in a functional style when using an Optional instead of having to use clumsy if statements (see https://winterbe.com/posts/2018/09/24/java-11-tutorial/)

    4. Streams have new methods ofNullable, dropWhile, takeWhile (see https://winterbe.com/posts/2018/09/24/java-11-tutorial/)

    5. String has new helper methods (see https://winterbe.com/posts/2018/09/24/java-11-tutorial/)

    6. InputStream finally gets a super useful method to transfer data to an OutputStream (see https://winterbe.com/posts/2018/09/24/java-11-tutorial/)

    7. Convenience Factory Methods for Collections make it significantly easier to create collections like lists, maps and sets (see https://winterbe.com/posts/2018/09/24/java-11-tutorial/)

    It's a huge task to do this for all the patterns at once so it is possible to create pull requests for individual patterns. This way we can complete the task gradually. The following checklist tracks which patterns have already been refactored.

    [x] abstract-document [x] abstract-factory [x] acyclic-visitor [x] adapter [x] aggregator-microservices [x] ambassador [x] api-gateway [x] async-method-invocation [x] balking [x] bridge [x] builder [x] business-delegate [x] bytecode [x] caching [x] callback [x] chain [x] circuit-breaker [x] collection-pipeline [x] command [x] commander [x] composite [x] converter [x] cqrs [x] dao [x] data-bus [x] data-locality [x] data-mapper [x] data-transfer-object [x] decorator [x] delegation [x] dependency-injection [x] dirty-flag [x] double-checked-locking [x] double-dispatch [x] eip-aggregator [x] eip-message-channel [x] eip-publish-subscribe [x] eip-splitter [x] eip-wire-tap [x] event-aggregator [x] event-asynchronous [x] event-driven-architecture [x] event-queue [x] event-sourcing [x] execute-around [x] extension-objects [x] facade [x] factory-kit [x] factory-method [x] faq.md [x] feature-toggle [x] fluentinterface [x] flux [x] flyweight [x] front-controller [x] guarded-suspension [x] half-sync-half-async [x] hexagonal [x] intercepting-filter [x] interpreter [x] iterator [x] layers [x] lazy-loading [x] leader-election [x] marker [x] master-worker-pattern [x] mediator [x] memento [x] model-view-controller [x] model-view-presenter [x] module [x] monad [x] monostate [x] multiton [x] mute-idiom [x] mutex [x] naked-objects [x] null-object [x] object-mother [x] object-pool [x] observer [x] page-object [x] partial-response [x] pipeline [x] poison-pill [x] priority-queue [x] private-class-data [x] producer-consumer [x] promise [x] property [x] prototype [x] proxy [x] queue-load-leveling [x] reactor [x] reader-writer-lock [x] repository [x] resource-acquisition-is-initialization [x] retry [x] semaphore [x] servant [x] serverless [x] service-layer [x] service-locator [x] singleton [x] spatial-partition [x] specification [x] state [x] step-builder [x] strategy [x] template-method [x] thread-pool [x] throttling [x] tls [x] tolerant-reader [x] trampoline [x] twin [x] typeobjectpattern [x] unit-of-work [x] value-object [x] visitor

    type: enhancement info: good first issue type: refactoring 
    opened by iluwatar 25
  • Lock Pattern #71: Added mutex and semaphore modules to demonstrate locks

    Lock Pattern #71: Added mutex and semaphore modules to demonstrate locks

    Added two modules to demonstrate locks.

    Mutex demonstrates a simple mutual exclusion lock. This is a binary lock which only allows one thread at a time to access the resource. See: Locks on Wikipedia

    Semaphore demonstrates a semaphore for controlling access to a pool of resources. See Semaphores on Wikipedia

    The main class of both programs is App.java.

    I haven't created any documentation yet. Let me know if you want any changes or need some explanations of the code, etc.

    status: under review 
    opened by gwildor28 25
  • Java 11 support: Start using var

    Java 11 support: Start using var

    This task is part of the Java 11 transition plan https://github.com/iluwatar/java-design-patterns/wiki/16.-Java-11-Transition

    Start using local-variable type inference (var). It is a nice example of syntactic sugar that helps reduce boilerplate code (see https://www.infoq.com/articles/upgrading-java-8-to-12/ and https://winterbe.com/posts/2018/09/24/java-11-tutorial/)

    It's a huge task to do this for all the patterns at once so it is possible to create pull requests for individual patterns. This way we can complete the task gradually. The following checklist tracks which patterns have already been refactored.

    [x] abstract-document [x] abstract-factory [x] acyclic-visitor [x] adapter [x] aggregator-microservices [x] ambassador [x] api-gateway [x] async-method-invocation [x] balking [x] bridge [x] builder [x] business-delegate [x] bytecode [x] caching [x] callback [x] chain [x] circuit-breaker [x] collection-pipeline [x] command [x] commander [x] composite [x] converter [x] cqrs [x] dao [x] data-bus [x] data-locality [x] data-mapper [x] data-transfer-object [x] decorator [x] delegation [x] dependency-injection [x] dirty-flag [x] double-checked-locking [x] double-dispatch [x] eip-aggregator [x] eip-message-channel [x] eip-publish-subscribe [x] eip-splitter [x] eip-wire-tap [x] event-aggregator [x] event-asynchronous [x] event-driven-architecture [x] event-queue [x] event-sourcing [x] execute-around [x] extension-objects [x] facade [x] factory-kit [x] factory-method [x] feature-toggle [x] fluentinterface [x] flux [x] flyweight [x] front-controller [x] guarded-suspension [x] half-sync-half-async [x] hexagonal [x] intercepting-filter [x] interpreter [x] iterator [x] layers [x] lazy-loading [x] leader-election [x] marker [x] master-worker-pattern [x] mediator [x] memento [x] model-view-controller [x] model-view-presenter [x] module [x] monad [x] monostate [x] multiton [x] mute-idiom [x] mutex [x] naked-objects [x] null-object [x] object-mother [x] object-pool [x] observer [x] page-object [x] partial-response [x] pipeline [x] poison-pill [x] priority-queue [x] private-class-data [x] producer-consumer [x] promise [x] property [x] prototype [x] proxy [x] queue-load-leveling [x] reactor [x] reader-writer-lock [x] repository [x] resource-acquisition-is-initialization [x] retry [x] role-object [x] semaphore [x] servant [x] serverless [x] service-layer [x] service-locator [x] singleton [x] spatial-partition [x] specification [x] state [x] step-builder [x] strategy [x] template-method [x] thread-pool [x] throttling [x] tls [x] tolerant-reader [x] trampoline [x] twin [x] typeobjectpattern [x] unit-of-work [x] value-object [x] visitor

    type: enhancement info: good first issue 
    opened by iluwatar 24
  • SonarQube reports code smells

    SonarQube reports code smells

    Java Design Patterns is analyzed with SonarQube.com static analysis. The analysis shows some blocker level code smells that should be fixed:

    https://sonarqube.com/component_issues/index?id=com.iluwatar%3Ajava-design-patterns#resolved=false|severities=BLOCKER|types=CODE_SMELL

    type: bug info: good first issue 
    opened by iluwatar 23
  • Hexagonal blog

    Hexagonal blog

    This is a pull request for a blog post about Hexagonal Architecture. The code samples have been embedded using gist-it. Looking forward to your comments.

    status: under review 
    opened by iluwatar 23
  • Upgrade to Spring Boot 3.x

    Upgrade to Spring Boot 3.x

    Spring Boot has recently released 3.x. In this task we are going to upgrade the dependency. There is a helpful migration guide available here: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide

    Acceptance criteria

    • Spring Boot upgraded to 3.x
    info: help wanted epic: dependencies 
    opened by iluwatar 1
  • Code snippet of **_<org.apache.commons.logging.LogFactory: org.apache.commons.logging.LogFactory getFactory()>_** in _**org.slf4j:jcl-over-slf4j:jar:1.7.16:compile**_ (loaded version):

    Code snippet of **__** in _**org.slf4j:jcl-over-slf4j:jar:1.7.16:compile**_ (loaded version):

        Code snippet of **_<org.apache.commons.logging.LogFactory: org.apache.commons.logging.LogFactory getFactory()>_** in _**org.slf4j:jcl-over-slf4j:jar:1.7.16:compile**_ (loaded version):
    

    01

    Code snippet of <org.apache.commons.logging.LogFactory: org.apache.commons.logging.LogFactory getFactory()> in commons-logging:commons-logging:jar:1.2:compile (shadowed but expected to invoke method): 02 .......

    As a result, these conflicting method included in commons-logging:commons-logging:jar:1.2:compile deals with different cases, which changes the control flows and data flows. So being forced to use these methods in org.slf4j:jcl-over-slf4j:jar:1.7.16:compile may lead to inconsisitent semantic behaviors.

    Originally posted by @HelloCoCooo in https://github.com/iluwatar/java-design-patterns/issues/868#issuecomment-480587255

    epic: dependencies type: refactoring 
    opened by vangirja 3
  • Java 17: Start using records

    Java 17: Start using records

    Available since Java 16, we can now use the record type for immutable classes. It's well described at https://dzone.com/articles/what-are-java-records

    Acceptance criteria

    • The repository code has been refactored to use the record type
    info: help wanted type: refactoring epic: code quality 
    opened by iluwatar 1
  • Java 17: Update switch expressions

    Java 17: Update switch expressions

    Java's switch expression syntax has vastly evolved over the years. It's well described at https://medium.com/@javatechie/the-evolution-of-switch-statement-from-java-7-to-java-17-4b5eee8d29b7

    Acceptance criteria

    • Java 17 switch expressions have been applied throughout the repository
    type: refactoring epic: code quality 
    opened by iluwatar 4
  • Java 17: Start using text blocks

    Java 17: Start using text blocks

    Available since Java 15, we can now use the text blocks feature. See the tutorial at https://www.baeldung.com/java-text-blocks

    Acceptance criteria

    • Text blocks have been applied throughout the repository to improve readability
    type: refactoring epic: code quality 
    opened by iluwatar 1
Owner
Ilkka SeppΓ€lΓ€
Ilkka SeppΓ€lΓ€
Simple way of causing a bsod using the native api implemented into a 1.12.2 Forge mod

Simple-BSOD-Mod Simple way of causing a bsod using the native api implemented into a 1.12.2 Forge mod. Dowload It HERE To make your own you can go to

INZO_Technologies 5 Dec 28, 2022
This library provides facilities to match an input string against a collection of regex patterns.

This library provides facilities to match an input string against a collection of regex patterns. This library acts as a wrapper around the popular Chimera library, which allows it to be used in Java.

Sahab 5 Oct 26, 2022
This is a basic Java project focused on applying object-oriented design in a real world application

Email-Administration-System-in-Java This is a basic Java project focused on applying object-oriented design in a real world application. Email Adminis

Muhammad Asad 5 Feb 4, 2022
⭕️ CircleMenu is a simple, elegant UI menu with a circular layout and material design animations

⭕️ CircleMenu is a simple, elegant UI menu with a circular layout and material design animations. Android UI library made by @Ramotion

Ramotion 1.9k Dec 27, 2022
Modern Java - A Guide to Java 8

Modern Java - A Guide to Java 8 This article was originally posted on my blog. You should also read my Java 11 Tutorial (including new language and AP

Benjamin Winterberg 16.1k Jan 5, 2023
icecream-java is a Java port of the icecream library for Python.

icecream-java is a Java port of the icecream library for Python.

Akshay Thakare 20 Apr 7, 2022
JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface that is bound to the external C library using method names.

JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface t

null 28 Dec 30, 2022
There are two versions of assignments(Java or C++) for the CS143-Compiler course, this repo is my Java-version solution.

Intro There are two versions of assignments(Java or C++) for the CS143-Compiler course, this repo is my Java-version solution. Course resources: This

F4DE 3 Dec 15, 2022
From Java To Kotlin - Your Cheat Sheet For Java To Kotlin

From Java To Kotlin From Java To Kotlin - Your Cheat Sheet For Java To Kotlin δΈ­ζ–‡ζ”―ζŒ PortuguΓͺs EspaΓ±ol Print to Console Java System.out.print("Amit Shek

MindOrks 5.8k Dec 29, 2022
Ultra-fast SQL-like queries on Java collections

CQEngine - Collection Query Engine CQEngine – Collection Query Engine – is a high-performance Java collection which can be searched with SQL-like quer

Niall Gallagher 1.6k Dec 30, 2022
Feature Flags for Java made easy

✨ ✨ ✨ FF4J - Feature Flipping for Java ✨ ✨ ✨ FF4j, is an implementation of the Feature Toggle pattern. ?? Features Feature Toggle: Enable. and disable

FF4j 1.1k Dec 25, 2022
A Java to iOS Objective-C translation tool and runtime.

J2ObjC: Java to Objective-C Translator and Runtime Project site: https://j2objc.org J2ObjC blog: https://j2objc.blogspot.com Questions and discussion:

Google 5.9k Dec 29, 2022
Make Slack and Facebook Bots in Java.

JBot Make bots in Java. JBot is a java framework (inspired by Howdyai's Botkit) to make Slack and Facebook bots in minutes. It provides all the boiler

Ram 1.2k Dec 18, 2022
An in-memory file system for Java 7+

Jimfs Jimfs is an in-memory file system for Java 7 and above, implementing the java.nio.file abstract file system APIs. Getting started The latest rel

Google 2.2k Jan 3, 2023
API gateway for REST and SOAP written in Java.

Membrane Service Proxy Reverse HTTP proxy (framework) written in Java, that can be used as an API gateway as a security proxy for HTTP based integrati

predic8 GmbH 389 Dec 31, 2022
A lightweight, simple FTP server. Pure Java, no dependencies.

MinimalFTP A lightweight, simple FTP server. Pure Java, no libraries. Features Although it's named "minimal", it supports a bunch of features: 100% Ja

Guilherme Chaguri 131 Jan 5, 2023
Detect uses of legacy Java APIs

Modernizer Maven Plugin Modernizer Maven Plugin detects uses of legacy APIs which modern Java versions supersede. These modern APIs are often more per

Andrew Gaul 325 Dec 12, 2022
A lightweight command processing pipeline ❍ β‡’ ❍ β‡’ ❍ for your Java awesome app.

PipelinR PipelinR is a lightweight command processing pipeline ❍ β‡’ ❍ β‡’ ❍ for your awesome Java app. PipelinR has been battle-proven on production, as

Eduards Sizovs 288 Jan 8, 2023
An extensible Java framework for building XML and non-XML streaming applications

Smooks Framework This is the Git source code repository for the Smooks Project. Build Status Building Pre-requisites JDK 8 Apache Maven 3.2.x Maven gi

Smooks Framework 353 Dec 1, 2022