Repository: iluwatar/java-design-patterns
Branch: master
Commit: 2d39fe7ed8ac
Files: 2957
Total size: 9.3 MB
Directory structure:
gitextract_iyxrb95i/
├── .all-contributorsrc
├── .editorconfig
├── .github/
│ ├── FUNDING.yml
│ ├── dependabot.yml
│ └── workflows/
│ ├── maven-ci.yml
│ ├── maven-pr-builder.yml
│ ├── presubmit.yml
│ └── stale.yml
├── .gitignore
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
├── CONTRIBUTING.MD
├── LICENSE.md
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── abstract-document/
│ ├── README.md
│ ├── etc/
│ │ ├── abstract-document.ucls
│ │ └── abstract-document.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── abstractdocument/
│ │ ├── AbstractDocument.java
│ │ ├── App.java
│ │ ├── Document.java
│ │ └── domain/
│ │ ├── Car.java
│ │ ├── HasModel.java
│ │ ├── HasParts.java
│ │ ├── HasPrice.java
│ │ ├── HasType.java
│ │ ├── Part.java
│ │ └── enums/
│ │ └── Property.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── abstractdocument/
│ ├── AbstractDocumentTest.java
│ ├── AppTest.java
│ └── DomainTest.java
├── abstract-factory/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ └── abstract-factory.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── abstractfactory/
│ │ ├── App.java
│ │ ├── Army.java
│ │ ├── Castle.java
│ │ ├── ElfArmy.java
│ │ ├── ElfCastle.java
│ │ ├── ElfKing.java
│ │ ├── ElfKingdomFactory.java
│ │ ├── King.java
│ │ ├── Kingdom.java
│ │ ├── KingdomFactory.java
│ │ ├── OrcArmy.java
│ │ ├── OrcCastle.java
│ │ ├── OrcKing.java
│ │ └── OrcKingdomFactory.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── abstractfactory/
│ ├── AbstractFactoryTest.java
│ └── AppTest.java
├── active-object/
│ ├── README.md
│ ├── etc/
│ │ └── active-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── activeobject/
│ │ ├── ActiveCreature.java
│ │ ├── App.java
│ │ └── Orc.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── activeobject/
│ ├── ActiveCreatureTest.java
│ └── AppTest.java
├── actor-model/
│ ├── README.md
│ ├── etc/
│ │ └── actor-model.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── actormodel/
│ │ ├── Actor.java
│ │ ├── ActorSystem.java
│ │ ├── App.java
│ │ ├── ExampleActor.java
│ │ ├── ExampleActor2.java
│ │ └── Message.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── actor/
│ └── ActorModelTest.java
├── acyclic-visitor/
│ ├── README.md
│ ├── etc/
│ │ └── acyclic-visitor.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── acyclicvisitor/
│ │ ├── AllModemVisitor.java
│ │ ├── App.java
│ │ ├── ConfigureForDosVisitor.java
│ │ ├── ConfigureForUnixVisitor.java
│ │ ├── Hayes.java
│ │ ├── HayesVisitor.java
│ │ ├── Modem.java
│ │ ├── ModemVisitor.java
│ │ ├── Zoom.java
│ │ └── ZoomVisitor.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── acyclicvisitor/
│ ├── AppTest.java
│ ├── HayesTest.java
│ └── ZoomTest.java
├── adapter/
│ ├── README.md
│ ├── etc/
│ │ └── adapter.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── adapter/
│ │ ├── App.java
│ │ ├── Captain.java
│ │ ├── FishingBoat.java
│ │ ├── FishingBoatAdapter.java
│ │ ├── RowingBoat.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── adapter/
│ ├── AdapterPatternTest.java
│ └── AppTest.java
├── ambassador/
│ ├── README.md
│ ├── etc/
│ │ └── ambassador.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── ambassador/
│ │ ├── App.java
│ │ ├── Client.java
│ │ ├── RemoteService.java
│ │ ├── RemoteServiceInterface.java
│ │ ├── RemoteServiceStatus.java
│ │ ├── ServiceAmbassador.java
│ │ └── util/
│ │ └── RandomProvider.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── ambassador/
│ ├── AppTest.java
│ ├── ClientTest.java
│ ├── RemoteServiceTest.java
│ └── ServiceAmbassadorTest.java
├── anti-corruption-layer/
│ ├── README.md
│ ├── etc/
│ │ └── anti-corruption-layer.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── corruption/
│ │ │ ├── App.java
│ │ │ ├── package-info.java
│ │ │ └── system/
│ │ │ ├── AntiCorruptionLayer.java
│ │ │ ├── DataStore.java
│ │ │ ├── ShopException.java
│ │ │ ├── legacy/
│ │ │ │ ├── LegacyOrder.java
│ │ │ │ ├── LegacyShop.java
│ │ │ │ └── LegacyStore.java
│ │ │ └── modern/
│ │ │ ├── Customer.java
│ │ │ ├── ModernOrder.java
│ │ │ ├── ModernShop.java
│ │ │ ├── ModernStore.java
│ │ │ └── Shipment.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── corruption/
│ └── system/
│ └── AntiCorruptionLayerTest.java
├── arrange-act-assert/
│ ├── README.md
│ ├── etc/
│ │ └── arrange-act-assert.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── arrangeactassert/
│ │ └── Cash.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── arrangeactassert/
│ ├── CashAAATest.java
│ └── CashAntiAAATest.java
├── async-method-invocation/
│ ├── README.md
│ ├── etc/
│ │ └── async-method-invocation.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── async/
│ │ └── method/
│ │ └── invocation/
│ │ ├── App.java
│ │ ├── AsyncCallback.java
│ │ ├── AsyncExecutor.java
│ │ ├── AsyncResult.java
│ │ └── ThreadAsyncExecutor.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── async/
│ └── method/
│ └── invocation/
│ ├── AppTest.java
│ └── ThreadAsyncExecutorTest.java
├── backpressure/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── backpressure/
│ │ ├── App.java
│ │ ├── Publisher.java
│ │ └── Subscriber.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── backpressure/
│ ├── AppTest.java
│ ├── LoggerExtension.java
│ ├── PublisherTest.java
│ └── SubscriberTest.java
├── balking/
│ ├── README.md
│ ├── etc/
│ │ ├── balking.ucls
│ │ └── balking.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── balking/
│ │ ├── App.java
│ │ ├── DelayProvider.java
│ │ ├── WashingMachine.java
│ │ └── WashingMachineState.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── balking/
│ ├── AppTest.java
│ └── WashingMachineTest.java
├── bloc/
│ ├── README.md
│ ├── etc/
│ │ ├── bloc.puml
│ │ └── bloc.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── bloc/
│ │ ├── Bloc.java
│ │ ├── BlocUi.java
│ │ ├── ListenerManager.java
│ │ ├── Main.java
│ │ ├── State.java
│ │ └── StateListener.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── bloc/
│ ├── BlocTest.java
│ └── BlocUiTest.java
├── bridge/
│ ├── README.md
│ ├── etc/
│ │ └── bridge.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── bridge/
│ │ ├── App.java
│ │ ├── Enchantment.java
│ │ ├── FlyingEnchantment.java
│ │ ├── Hammer.java
│ │ ├── SoulEatingEnchantment.java
│ │ ├── Sword.java
│ │ └── Weapon.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── bridge/
│ ├── AppTest.java
│ ├── HammerTest.java
│ ├── SwordTest.java
│ └── WeaponTest.java
├── builder/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ └── builder.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── builder/
│ │ ├── App.java
│ │ ├── Armor.java
│ │ ├── HairColor.java
│ │ ├── HairType.java
│ │ ├── Hero.java
│ │ ├── Profession.java
│ │ └── Weapon.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── builder/
│ ├── AppTest.java
│ └── HeroTest.java
├── business-delegate/
│ ├── README.md
│ ├── etc/
│ │ └── business-delegate.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── business/
│ │ └── delegate/
│ │ ├── App.java
│ │ ├── BusinessDelegate.java
│ │ ├── BusinessLookup.java
│ │ ├── MobileClient.java
│ │ ├── NetflixService.java
│ │ ├── VideoStreamingService.java
│ │ └── YouTubeService.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── business/
│ └── delegate/
│ ├── AppTest.java
│ └── BusinessDelegateTest.java
├── bytecode/
│ ├── README.md
│ ├── etc/
│ │ └── bytecode.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── bytecode/
│ │ ├── App.java
│ │ ├── Instruction.java
│ │ ├── VirtualMachine.java
│ │ ├── Wizard.java
│ │ └── util/
│ │ └── InstructionConverterUtil.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── bytecode/
│ ├── AppTest.java
│ ├── VirtualMachineTest.java
│ └── util/
│ └── InstructionConverterUtilTest.java
├── caching/
│ ├── .gitignore
│ ├── README.md
│ ├── docker-compose.yml
│ ├── etc/
│ │ ├── caching.ucls
│ │ └── caching.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── caching/
│ │ ├── App.java
│ │ ├── AppManager.java
│ │ ├── CacheStore.java
│ │ ├── CachingPolicy.java
│ │ ├── LruCache.java
│ │ ├── UserAccount.java
│ │ ├── constants/
│ │ │ ├── CachingConstants.java
│ │ │ └── package-info.java
│ │ ├── database/
│ │ │ ├── DbManager.java
│ │ │ ├── DbManagerFactory.java
│ │ │ ├── MongoDb.java
│ │ │ ├── VirtualDb.java
│ │ │ └── package-info.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── caching/
│ ├── AppTest.java
│ ├── CachingTest.java
│ └── database/
│ └── MongoDbTest.java
├── callback/
│ ├── README.md
│ ├── etc/
│ │ ├── callback.ucls
│ │ └── callback.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── callback/
│ │ ├── App.java
│ │ ├── Callback.java
│ │ ├── SimpleTask.java
│ │ ├── Task.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── callback/
│ ├── AppTest.java
│ └── CallbackTest.java
├── chain-of-responsibility/
│ ├── README.md
│ ├── etc/
│ │ └── chain-of-responsibility.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── chain/
│ │ ├── App.java
│ │ ├── OrcCommander.java
│ │ ├── OrcKing.java
│ │ ├── OrcOfficer.java
│ │ ├── OrcSoldier.java
│ │ ├── Request.java
│ │ ├── RequestHandler.java
│ │ └── RequestType.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── chain/
│ ├── AppTest.java
│ └── OrcKingTest.java
├── checkstyle-suppressions.xml
├── circuit-breaker/
│ ├── README.md
│ ├── etc/
│ │ └── circuit-breaker.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── circuitbreaker/
│ │ ├── App.java
│ │ ├── CircuitBreaker.java
│ │ ├── DefaultCircuitBreaker.java
│ │ ├── DelayedRemoteService.java
│ │ ├── MonitoringService.java
│ │ ├── QuickRemoteService.java
│ │ ├── RemoteService.java
│ │ ├── RemoteServiceException.java
│ │ └── State.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── circuitbreaker/
│ ├── AppTest.java
│ ├── DefaultCircuitBreakerTest.java
│ ├── DelayedRemoteServiceTest.java
│ └── MonitoringServiceTest.java
├── clean-architecture/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── cleanarchitecture/
│ │ ├── App.java
│ │ ├── Cart.java
│ │ ├── CartController.java
│ │ ├── CartRepository.java
│ │ ├── InMemoryCartRepository.java
│ │ ├── InMemoryOrderRepository.java
│ │ ├── InMemoryProductRepository.java
│ │ ├── Order.java
│ │ ├── OrderController.java
│ │ ├── OrderRepository.java
│ │ ├── Product.java
│ │ ├── ProductRepository.java
│ │ ├── ShoppingCartService.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── cleanarchitecture/
│ ├── AppTest.java
│ └── CartControllerTest.java
├── client-session/
│ ├── README.md
│ ├── etc/
│ │ └── client-session.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── client/
│ │ └── session/
│ │ ├── App.java
│ │ ├── Request.java
│ │ ├── Server.java
│ │ └── Session.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── client/
│ └── session/
│ ├── AppTest.java
│ └── ServerTest.java
├── collecting-parameter/
│ ├── README.md
│ ├── etc/
│ │ └── collecting-parameter.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── collectingparameter/
│ │ ├── App.java
│ │ ├── PaperSizes.java
│ │ ├── PrinterItem.java
│ │ └── PrinterQueue.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── collectingparameter/
│ ├── AppTest.java
│ ├── CollectingParameterTest.java
│ └── PrinterQueueTest.java
├── collection-pipeline/
│ ├── README.md
│ ├── etc/
│ │ └── collection-pipeline.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── collectionpipeline/
│ │ ├── App.java
│ │ ├── Car.java
│ │ ├── CarFactory.java
│ │ ├── Category.java
│ │ ├── FunctionalProgramming.java
│ │ ├── ImperativeProgramming.java
│ │ └── Person.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── collectionpipeline/
│ └── AppTest.java
├── combinator/
│ ├── README.md
│ ├── etc/
│ │ └── combinator.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── combinator/
│ │ ├── CombinatorApp.java
│ │ ├── Finder.java
│ │ └── Finders.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── combinator/
│ ├── CombinatorAppTest.java
│ ├── FinderTest.java
│ └── FindersTest.java
├── command/
│ ├── README.md
│ ├── etc/
│ │ ├── command.ucls
│ │ └── command.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── command/
│ │ ├── App.java
│ │ ├── Goblin.java
│ │ ├── Size.java
│ │ ├── Target.java
│ │ ├── Visibility.java
│ │ └── Wizard.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── command/
│ ├── AppTest.java
│ └── CommandTest.java
├── command-query-responsibility-segregation/
│ ├── README.md
│ ├── etc/
│ │ ├── command-query-responsibility-segregation.urm.puml
│ │ ├── cqrs.ucls
│ │ └── cqrs.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── cqrs/
│ │ │ ├── app/
│ │ │ │ └── App.java
│ │ │ ├── commandes/
│ │ │ │ ├── CommandService.java
│ │ │ │ └── CommandServiceImpl.java
│ │ │ ├── constants/
│ │ │ │ └── AppConstants.java
│ │ │ ├── domain/
│ │ │ │ └── model/
│ │ │ │ ├── Author.java
│ │ │ │ └── Book.java
│ │ │ ├── dto/
│ │ │ │ ├── Author.java
│ │ │ │ └── Book.java
│ │ │ ├── queries/
│ │ │ │ ├── QueryService.java
│ │ │ │ └── QueryServiceImpl.java
│ │ │ └── util/
│ │ │ └── HibernateUtil.java
│ │ └── resources/
│ │ ├── hibernate.cfg.xml
│ │ └── logback.xml
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── cqrs/
│ │ └── IntegrationTest.java
│ └── resources/
│ ├── hibernate.cfg.xml
│ └── logback.xml
├── commander/
│ ├── README.md
│ ├── etc/
│ │ └── commander.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── commander/
│ │ ├── AppAllCases.java
│ │ ├── Commander.java
│ │ ├── Database.java
│ │ ├── Order.java
│ │ ├── Retry.java
│ │ ├── RetryParams.java
│ │ ├── Service.java
│ │ ├── TimeLimits.java
│ │ ├── User.java
│ │ ├── employeehandle/
│ │ │ ├── EmployeeDatabase.java
│ │ │ └── EmployeeHandle.java
│ │ ├── exceptions/
│ │ │ ├── DatabaseUnavailableException.java
│ │ │ ├── IsEmptyException.java
│ │ │ ├── ItemUnavailableException.java
│ │ │ ├── PaymentDetailsErrorException.java
│ │ │ └── ShippingNotPossibleException.java
│ │ ├── messagingservice/
│ │ │ ├── MessagingDatabase.java
│ │ │ └── MessagingService.java
│ │ ├── paymentservice/
│ │ │ ├── PaymentDatabase.java
│ │ │ └── PaymentService.java
│ │ ├── queue/
│ │ │ ├── Queue.java
│ │ │ ├── QueueDatabase.java
│ │ │ └── QueueTask.java
│ │ └── shippingservice/
│ │ ├── ShippingDatabase.java
│ │ └── ShippingService.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── commander/
│ ├── CommanderTest.java
│ └── RetryTest.java
├── component/
│ ├── README.md
│ ├── etc/
│ │ ├── component.uml.puml
│ │ └── component.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── component/
│ │ ├── App.java
│ │ ├── GameObject.java
│ │ └── component/
│ │ ├── graphiccomponent/
│ │ │ ├── GraphicComponent.java
│ │ │ └── ObjectGraphicComponent.java
│ │ ├── inputcomponent/
│ │ │ ├── DemoInputComponent.java
│ │ │ ├── InputComponent.java
│ │ │ └── PlayerInputComponent.java
│ │ └── physiccomponent/
│ │ ├── ObjectPhysicComponent.java
│ │ └── PhysicComponent.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── component/
│ ├── AppTest.java
│ └── GameObjectTest.java
├── composite/
│ ├── README.md
│ ├── etc/
│ │ └── composite.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── composite/
│ │ ├── App.java
│ │ ├── Letter.java
│ │ ├── LetterComposite.java
│ │ ├── Messenger.java
│ │ ├── Sentence.java
│ │ └── Word.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── composite/
│ ├── AppTest.java
│ └── MessengerTest.java
├── composite-entity/
│ ├── README.md
│ ├── etc/
│ │ └── composite-entity.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── compositeentity/
│ │ ├── App.java
│ │ ├── CoarseGrainedObject.java
│ │ ├── CompositeEntity.java
│ │ ├── ConsoleCoarseGrainedObject.java
│ │ ├── DependentObject.java
│ │ ├── MessageDependentObject.java
│ │ └── SignalDependentObject.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── compositeentity/
│ ├── AppTest.java
│ └── PersistenceTest.java
├── composite-view/
│ ├── README.md
│ ├── etc/
│ │ └── composite-view.urm.puml
│ ├── pom.xml
│ ├── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── compositeview/
│ │ │ ├── AppServlet.java
│ │ │ └── ClientPropertiesBean.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── compositeview/
│ │ ├── AppServletTest.java
│ │ └── JavaBeansTest.java
│ └── web/
│ ├── WEB-INF/
│ │ └── web.xml
│ ├── businessNews.jsp
│ ├── header.jsp
│ ├── index.jsp
│ ├── localNews.jsp
│ ├── newsDisplay.jsp
│ ├── scienceNews.jsp
│ ├── sportsNews.jsp
│ └── worldNews.jsp
├── context-object/
│ ├── README.md
│ ├── etc/
│ │ └── context-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── context/
│ │ └── object/
│ │ ├── App.java
│ │ ├── LayerA.java
│ │ ├── LayerB.java
│ │ ├── LayerC.java
│ │ ├── ServiceContext.java
│ │ └── ServiceContextFactory.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── contect/
│ └── object/
│ ├── AppTest.java
│ └── ServiceContextTest.java
├── converter/
│ ├── README.md
│ ├── etc/
│ │ ├── Converter.ucls
│ │ └── converter.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── converter/
│ │ ├── App.java
│ │ ├── Converter.java
│ │ ├── User.java
│ │ ├── UserConverter.java
│ │ └── UserDto.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── converter/
│ ├── AppTest.java
│ └── ConverterTest.java
├── curiously-recurring-template-pattern/
│ ├── README.md
│ ├── etc/
│ │ └── curiously-recurring-template-pattern.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── crtp/
│ │ ├── App.java
│ │ ├── Fighter.java
│ │ ├── MmaBantamweightFighter.java
│ │ ├── MmaFighter.java
│ │ ├── MmaHeavyweightFighter.java
│ │ └── MmaLightweightFighter.java
│ └── test/
│ └── java/
│ └── crtp/
│ ├── AppTest.java
│ └── FightTest.java
├── currying/
│ ├── README.md
│ ├── etc/
│ │ └── currying.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── currying/
│ │ ├── App.java
│ │ ├── Book.java
│ │ └── Genre.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── currying/
│ ├── AppTest.java
│ └── BookCurryingTest.java
├── dao-factory/
│ ├── README.md
│ ├── etc/
│ │ └── dao-factory.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── daofactory/
│ │ │ ├── App.java
│ │ │ ├── CustomException.java
│ │ │ ├── Customer.java
│ │ │ ├── CustomerDAO.java
│ │ │ ├── DAOFactory.java
│ │ │ ├── DAOFactoryProvider.java
│ │ │ ├── DataSourceType.java
│ │ │ ├── FlatFileCustomerDAO.java
│ │ │ ├── FlatFileDataSourceFactory.java
│ │ │ ├── H2CustomerDAO.java
│ │ │ ├── H2DataSourceFactory.java
│ │ │ ├── MongoCustomerDAO.java
│ │ │ └── MongoDataSourceFactory.java
│ │ └── resources/
│ │ └── logback.xml
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── daofactory/
│ ├── AppTest.java
│ ├── DAOFactoryTest.java
│ ├── FlatFileCustomerDAOTest.java
│ ├── H2CustomerDAOTest.java
│ └── MongoCustomerDAOTest.java
├── data-access-object/
│ ├── README.md
│ ├── etc/
│ │ ├── dao.ucls
│ │ ├── dao.urm.puml
│ │ └── data-access-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── dao/
│ │ ├── App.java
│ │ ├── CustomException.java
│ │ ├── Customer.java
│ │ ├── CustomerDao.java
│ │ ├── CustomerSchemaSql.java
│ │ ├── DbCustomerDao.java
│ │ └── InMemoryCustomerDao.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── dao/
│ ├── AppTest.java
│ ├── CustomerTest.java
│ ├── DbCustomerDaoTest.java
│ └── InMemoryCustomerDaoTest.java
├── data-bus/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ └── data-bus.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── databus/
│ │ ├── AbstractDataType.java
│ │ ├── App.java
│ │ ├── DataBus.java
│ │ ├── DataType.java
│ │ ├── Member.java
│ │ ├── data/
│ │ │ ├── MessageData.java
│ │ │ ├── StartingData.java
│ │ │ └── StoppingData.java
│ │ └── members/
│ │ ├── MessageCollectorMember.java
│ │ └── StatusMember.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── databus/
│ ├── DataBusTest.java
│ └── members/
│ ├── MessageCollectorMemberTest.java
│ └── StatusMemberTest.java
├── data-locality/
│ ├── README.md
│ ├── etc/
│ │ └── data-locality.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── data/
│ │ └── locality/
│ │ ├── Application.java
│ │ └── game/
│ │ ├── GameEntity.java
│ │ └── component/
│ │ ├── AiComponent.java
│ │ ├── Component.java
│ │ ├── PhysicsComponent.java
│ │ ├── RenderComponent.java
│ │ └── manager/
│ │ ├── AiComponentManager.java
│ │ ├── PhysicsComponentManager.java
│ │ └── RenderComponentManager.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── data/
│ └── locality/
│ └── ApplicationTest.java
├── data-mapper/
│ ├── README.md
│ ├── etc/
│ │ ├── data-mapper.ucls
│ │ └── data-mapper.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── datamapper/
│ │ ├── App.java
│ │ ├── DataMapperException.java
│ │ ├── Student.java
│ │ ├── StudentDataMapper.java
│ │ └── StudentDataMapperImpl.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── datamapper/
│ ├── AppTest.java
│ ├── DataMapperTest.java
│ └── StudentTest.java
├── data-transfer-object/
│ ├── README.md
│ ├── etc/
│ │ ├── data-transfer-object.ucls
│ │ └── data-transfer-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── datatransfer/
│ │ ├── App.java
│ │ ├── customer/
│ │ │ ├── CustomerDto.java
│ │ │ └── CustomerResource.java
│ │ └── product/
│ │ ├── Product.java
│ │ ├── ProductDto.java
│ │ └── ProductResource.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── datatransfer/
│ ├── AppTest.java
│ └── customer/
│ └── CustomerResourceTest.java
├── decorator/
│ ├── README.md
│ ├── etc/
│ │ └── decorator.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── decorator/
│ │ ├── App.java
│ │ ├── ClubbedTroll.java
│ │ ├── SimpleTroll.java
│ │ └── Troll.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── decorator/
│ ├── AppTest.java
│ ├── ClubbedTrollTest.java
│ └── SimpleTrollTest.java
├── delegation/
│ ├── README.md
│ ├── etc/
│ │ ├── delegation.ucls
│ │ └── delegation.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── delegation/
│ │ └── simple/
│ │ ├── App.java
│ │ ├── Printer.java
│ │ ├── PrinterController.java
│ │ └── printers/
│ │ ├── CanonPrinter.java
│ │ ├── EpsonPrinter.java
│ │ └── HpPrinter.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── delegation/
│ └── simple/
│ ├── AppTest.java
│ └── DelegateTest.java
├── dependency-injection/
│ ├── README.md
│ ├── etc/
│ │ ├── dependency-injection.ucls
│ │ └── dependency-injection.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── dependency/
│ │ └── injection/
│ │ ├── AdvancedSorceress.java
│ │ ├── AdvancedWizard.java
│ │ ├── App.java
│ │ ├── GuiceWizard.java
│ │ ├── OldTobyTobacco.java
│ │ ├── RivendellTobacco.java
│ │ ├── SecondBreakfastTobacco.java
│ │ ├── SimpleWizard.java
│ │ ├── Tobacco.java
│ │ ├── TobaccoModule.java
│ │ └── Wizard.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── dependency/
│ └── injection/
│ ├── AdvancedSorceressTest.java
│ ├── AdvancedWizardTest.java
│ ├── AppTest.java
│ ├── GuiceWizardTest.java
│ ├── SimpleWizardTest.java
│ └── utils/
│ └── InMemoryAppender.java
├── dirty-flag/
│ ├── README.md
│ ├── etc/
│ │ ├── dirty-flag.ucls
│ │ └── dirty-flag.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── dirtyflag/
│ │ │ ├── App.java
│ │ │ ├── DataFetcher.java
│ │ │ └── World.java
│ │ └── resources/
│ │ └── world.txt
│ └── test/
│ └── java/
│ └── org/
│ └── dirty/
│ └── flag/
│ ├── AppTest.java
│ └── DirtyFlagTest.java
├── domain-model/
│ ├── README.md
│ ├── etc/
│ │ └── domain-model.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── domainmodel/
│ │ ├── App.java
│ │ ├── Customer.java
│ │ ├── CustomerDao.java
│ │ ├── CustomerDaoImpl.java
│ │ ├── Product.java
│ │ ├── ProductDao.java
│ │ └── ProductDaoImpl.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── domainmodel/
│ ├── AppTest.java
│ ├── CustomerDaoImplTest.java
│ ├── CustomerTest.java
│ ├── ProductDaoImplTest.java
│ ├── ProductTest.java
│ └── TestUtils.java
├── double-buffer/
│ ├── README.md
│ ├── etc/
│ │ └── double-buffer.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── doublebuffer/
│ │ ├── App.java
│ │ ├── Buffer.java
│ │ ├── FrameBuffer.java
│ │ ├── Pixel.java
│ │ └── Scene.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── doublebuffer/
│ ├── AppTest.java
│ ├── FrameBufferTest.java
│ └── SceneTest.java
├── double-checked-locking/
│ ├── README.md
│ ├── etc/
│ │ ├── double-checked-locking.ucls
│ │ └── double-checked-locking.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── doublechecked/
│ │ │ └── locking/
│ │ │ ├── App.java
│ │ │ ├── Inventory.java
│ │ │ └── Item.java
│ │ └── resources/
│ │ └── logback.xml
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── doublechecked/
│ └── locking/
│ ├── AppTest.java
│ └── InventoryTest.java
├── double-dispatch/
│ ├── README.md
│ ├── etc/
│ │ ├── double-dispatch.ucls
│ │ └── double-dispatch.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── doubledispatch/
│ │ ├── App.java
│ │ ├── FlamingAsteroid.java
│ │ ├── GameObject.java
│ │ ├── Meteoroid.java
│ │ ├── Rectangle.java
│ │ ├── SpaceStationIss.java
│ │ ├── SpaceStationMir.java
│ │ └── constants/
│ │ └── AppConstants.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── doubledispatch/
│ ├── AppTest.java
│ ├── CollisionTest.java
│ ├── FlamingAsteroidTest.java
│ ├── MeteoroidTest.java
│ ├── RectangleTest.java
│ ├── SpaceStationIssTest.java
│ └── SpaceStationMirTest.java
├── dynamic-proxy/
│ ├── README.md
│ ├── etc/
│ │ └── dynamic-proxy.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── dynamicproxy/
│ │ ├── Album.java
│ │ ├── AlbumInvocationHandler.java
│ │ ├── AlbumService.java
│ │ ├── App.java
│ │ └── tinyrestclient/
│ │ ├── JsonUtil.java
│ │ ├── TinyRestClient.java
│ │ └── annotation/
│ │ ├── Body.java
│ │ ├── Delete.java
│ │ ├── Get.java
│ │ ├── Http.java
│ │ ├── Path.java
│ │ ├── Post.java
│ │ └── Put.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── dynamicproxy/
│ └── AppTest.java
├── event-aggregator/
│ ├── README.md
│ ├── etc/
│ │ ├── classes.ucls
│ │ └── event-aggregator.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── event/
│ │ └── aggregator/
│ │ ├── App.java
│ │ ├── Event.java
│ │ ├── EventEmitter.java
│ │ ├── EventObserver.java
│ │ ├── KingJoffrey.java
│ │ ├── KingsHand.java
│ │ ├── LordBaelish.java
│ │ ├── LordVarys.java
│ │ ├── Scout.java
│ │ └── Weekday.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── event/
│ └── aggregator/
│ ├── AppTest.java
│ ├── EventEmitterTest.java
│ ├── EventTest.java
│ ├── KingJoffreyTest.java
│ ├── KingsHandTest.java
│ ├── LordBaelishTest.java
│ ├── LordVarysTest.java
│ ├── ScoutTest.java
│ └── WeekdayTest.java
├── event-based-asynchronous/
│ ├── README.md
│ ├── etc/
│ │ ├── event-asynchronous.ucls
│ │ ├── event-asynchronous.urm.puml
│ │ └── event-based-asynchronous.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── event/
│ │ │ └── asynchronous/
│ │ │ ├── App.java
│ │ │ ├── AsyncEvent.java
│ │ │ ├── Event.java
│ │ │ ├── EventDoesNotExistException.java
│ │ │ ├── EventManager.java
│ │ │ ├── InvalidOperationException.java
│ │ │ ├── LongRunningEventException.java
│ │ │ ├── MaxNumOfEventsAllowedException.java
│ │ │ └── ThreadCompleteListener.java
│ │ └── resources/
│ │ └── config.properties
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── event/
│ └── asynchronous/
│ ├── AppTest.java
│ └── EventAsynchronousTest.java
├── event-driven-architecture/
│ ├── README.md
│ ├── etc/
│ │ ├── eda.ucls
│ │ └── event-driven-architecture.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── eda/
│ │ ├── App.java
│ │ ├── event/
│ │ │ ├── AbstractEvent.java
│ │ │ ├── UserCreatedEvent.java
│ │ │ └── UserUpdatedEvent.java
│ │ ├── framework/
│ │ │ ├── Event.java
│ │ │ ├── EventDispatcher.java
│ │ │ └── Handler.java
│ │ ├── handler/
│ │ │ ├── UserCreatedEventHandler.java
│ │ │ └── UserUpdatedEventHandler.java
│ │ └── model/
│ │ └── User.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── eda/
│ ├── AppTest.java
│ ├── event/
│ │ └── UserCreatedEventTest.java
│ └── framework/
│ └── EventDispatcherTest.java
├── event-queue/
│ ├── README.md
│ ├── etc/
│ │ ├── Bass-Drum-1.aif
│ │ ├── Closed-Hi-Hat-1.aif
│ │ └── event-queue.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── event/
│ │ └── queue/
│ │ ├── App.java
│ │ ├── Audio.java
│ │ └── PlayMessage.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── event/
│ └── queue/
│ └── AudioTest.java
├── event-sourcing/
│ ├── README.md
│ ├── etc/
│ │ ├── event-sourcing.ucls
│ │ └── event-sourcing.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── event/
│ │ └── sourcing/
│ │ ├── app/
│ │ │ └── App.java
│ │ ├── domain/
│ │ │ └── Account.java
│ │ ├── event/
│ │ │ ├── AccountCreateEvent.java
│ │ │ ├── DomainEvent.java
│ │ │ ├── MoneyDepositEvent.java
│ │ │ └── MoneyTransferEvent.java
│ │ ├── processor/
│ │ │ ├── DomainEventProcessor.java
│ │ │ ├── EventJournal.java
│ │ │ └── JsonFileJournal.java
│ │ └── state/
│ │ └── AccountAggregate.java
│ └── test/
│ └── java/
│ └── IntegrationTest.java
├── execute-around/
│ ├── README.md
│ ├── etc/
│ │ ├── execute-around.ucls
│ │ └── execute-around.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── execute/
│ │ └── around/
│ │ ├── App.java
│ │ ├── FileWriterAction.java
│ │ └── SimpleFileWriter.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── execute/
│ └── around/
│ ├── AppTest.java
│ └── SimpleFileWriterTest.java
├── extension-objects/
│ ├── README.md
│ ├── etc/
│ │ ├── extension-objects.urm.puml
│ │ └── extension_obj.ucls
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ ├── App.java
│ │ ├── abstractextensions/
│ │ │ ├── CommanderExtension.java
│ │ │ ├── SergeantExtension.java
│ │ │ ├── SoldierExtension.java
│ │ │ └── UnitExtension.java
│ │ ├── concreteextensions/
│ │ │ ├── Commander.java
│ │ │ ├── Sergeant.java
│ │ │ └── Soldier.java
│ │ └── units/
│ │ ├── CommanderUnit.java
│ │ ├── SergeantUnit.java
│ │ ├── SoldierUnit.java
│ │ └── Unit.java
│ └── test/
│ └── java/
│ ├── AppTest.java
│ ├── concreteextensions/
│ │ ├── CommanderTest.java
│ │ ├── SergeantTest.java
│ │ └── SoldierTest.java
│ └── units/
│ ├── CommanderUnitTest.java
│ ├── SergeantUnitTest.java
│ ├── SoldierUnitTest.java
│ └── UnitTest.java
├── facade/
│ ├── README.md
│ ├── etc/
│ │ └── facade.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── facade/
│ │ ├── App.java
│ │ ├── DwarvenCartOperator.java
│ │ ├── DwarvenGoldDigger.java
│ │ ├── DwarvenGoldmineFacade.java
│ │ ├── DwarvenMineWorker.java
│ │ └── DwarvenTunnelDigger.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── facade/
│ ├── AppTest.java
│ └── DwarvenGoldmineFacadeTest.java
├── factory/
│ ├── README.md
│ ├── etc/
│ │ └── factory.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── factory/
│ │ ├── App.java
│ │ ├── Coin.java
│ │ ├── CoinFactory.java
│ │ ├── CoinType.java
│ │ ├── CopperCoin.java
│ │ └── GoldCoin.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── factory/
│ ├── AppTest.java
│ └── CoinFactoryTest.java
├── factory-kit/
│ ├── README.md
│ ├── etc/
│ │ ├── factory-kit.ucls
│ │ └── factory-kit.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── factorykit/
│ │ ├── App.java
│ │ ├── Axe.java
│ │ ├── Bow.java
│ │ ├── Builder.java
│ │ ├── Spear.java
│ │ ├── Sword.java
│ │ ├── Weapon.java
│ │ ├── WeaponFactory.java
│ │ └── WeaponType.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── factorykit/
│ ├── app/
│ │ └── AppTest.java
│ └── factorykit/
│ └── FactoryKitTest.java
├── factory-method/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ └── factory-method.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── factory/
│ │ └── method/
│ │ ├── App.java
│ │ ├── Blacksmith.java
│ │ ├── ElfBlacksmith.java
│ │ ├── ElfWeapon.java
│ │ ├── OrcBlacksmith.java
│ │ ├── OrcWeapon.java
│ │ ├── Weapon.java
│ │ └── WeaponType.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── factory/
│ └── method/
│ ├── AppTest.java
│ └── FactoryMethodTest.java
├── fanout-fanin/
│ ├── README.md
│ ├── etc/
│ │ └── fanout-fanin.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── fanout/
│ │ └── fanin/
│ │ ├── App.java
│ │ ├── Consumer.java
│ │ ├── FanOutFanIn.java
│ │ └── SquareNumberRequest.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── fanout/
│ └── fanin/
│ ├── AppTest.java
│ ├── FanOutFanInTest.java
│ └── SquareNumberRequestTest.java
├── feature-toggle/
│ ├── README.md
│ ├── etc/
│ │ ├── feature-toggle.ucls
│ │ └── feature-toggle.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── featuretoggle/
│ │ ├── App.java
│ │ ├── pattern/
│ │ │ ├── Service.java
│ │ │ ├── propertiesversion/
│ │ │ │ └── PropertiesFeatureToggleVersion.java
│ │ │ └── tieredversion/
│ │ │ └── TieredFeatureToggleVersion.java
│ │ └── user/
│ │ ├── User.java
│ │ └── UserGroup.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── featuretoggle/
│ ├── pattern/
│ │ ├── propertiesversion/
│ │ │ └── PropertiesFeatureToggleVersionTest.java
│ │ └── tieredversion/
│ │ └── TieredFeatureToggleVersionTest.java
│ └── user/
│ └── UserGroupTest.java
├── filterer/
│ ├── README.md
│ ├── etc/
│ │ └── filterer.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── filterer/
│ │ ├── App.java
│ │ ├── domain/
│ │ │ └── Filterer.java
│ │ └── threat/
│ │ ├── ProbabilisticThreatAwareSystem.java
│ │ ├── ProbableThreat.java
│ │ ├── SimpleProbabilisticThreatAwareSystem.java
│ │ ├── SimpleProbableThreat.java
│ │ ├── SimpleThreat.java
│ │ ├── SimpleThreatAwareSystem.java
│ │ ├── Threat.java
│ │ ├── ThreatAwareSystem.java
│ │ └── ThreatType.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── filterer/
│ ├── AppTest.java
│ └── threat/
│ ├── SimpleProbabilisticThreatAwareSystemTest.java
│ └── SimpleThreatAwareSystemTest.java
├── fluent-interface/
│ ├── README.md
│ ├── etc/
│ │ ├── fluent-interface.urm.puml
│ │ ├── fluentinterface.ucls
│ │ └── fluentinterface.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── fluentinterface/
│ │ ├── app/
│ │ │ └── App.java
│ │ └── fluentiterable/
│ │ ├── FluentIterable.java
│ │ ├── lazy/
│ │ │ ├── DecoratingIterator.java
│ │ │ └── LazyFluentIterable.java
│ │ └── simple/
│ │ └── SimpleFluentIterable.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── fluentinterface/
│ ├── app/
│ │ └── AppTest.java
│ └── fluentiterable/
│ ├── FluentIterableTest.java
│ ├── lazy/
│ │ └── LazyFluentIterableTest.java
│ └── simple/
│ └── SimpleFluentIterableTest.java
├── flux/
│ ├── README.md
│ ├── etc/
│ │ ├── flux.ucls
│ │ └── flux.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── flux/
│ │ ├── action/
│ │ │ ├── Action.java
│ │ │ ├── ActionType.java
│ │ │ ├── Content.java
│ │ │ ├── ContentAction.java
│ │ │ ├── MenuAction.java
│ │ │ └── MenuItem.java
│ │ ├── app/
│ │ │ └── App.java
│ │ ├── dispatcher/
│ │ │ └── Dispatcher.java
│ │ ├── store/
│ │ │ ├── ContentStore.java
│ │ │ ├── MenuStore.java
│ │ │ └── Store.java
│ │ └── view/
│ │ ├── ContentView.java
│ │ ├── MenuView.java
│ │ └── View.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── flux/
│ ├── action/
│ │ ├── ContentTest.java
│ │ └── MenuItemTest.java
│ ├── app/
│ │ └── AppTest.java
│ ├── dispatcher/
│ │ └── DispatcherTest.java
│ ├── store/
│ │ ├── ContentStoreTest.java
│ │ └── MenuStoreTest.java
│ └── view/
│ ├── ContentViewTest.java
│ └── MenuViewTest.java
├── flyweight/
│ ├── README.md
│ ├── etc/
│ │ └── flyweight.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── flyweight/
│ │ ├── AlchemistShop.java
│ │ ├── App.java
│ │ ├── HealingPotion.java
│ │ ├── HolyWaterPotion.java
│ │ ├── InvisibilityPotion.java
│ │ ├── PoisonPotion.java
│ │ ├── Potion.java
│ │ ├── PotionFactory.java
│ │ ├── PotionType.java
│ │ └── StrengthPotion.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── flyweight/
│ ├── AlchemistShopTest.java
│ └── AppTest.java
├── front-controller/
│ ├── README.md
│ ├── etc/
│ │ ├── front-controller.ucls
│ │ └── front-controller.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── front/
│ │ └── controller/
│ │ ├── App.java
│ │ ├── ApplicationException.java
│ │ ├── ArcherCommand.java
│ │ ├── ArcherView.java
│ │ ├── CatapultCommand.java
│ │ ├── CatapultView.java
│ │ ├── Command.java
│ │ ├── Dispatcher.java
│ │ ├── ErrorView.java
│ │ ├── FrontController.java
│ │ ├── UnknownCommand.java
│ │ └── View.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── front/
│ └── controller/
│ ├── AppTest.java
│ ├── ApplicationExceptionTest.java
│ ├── CommandTest.java
│ ├── DispatcherTest.java
│ ├── FrontControllerTest.java
│ ├── ViewTest.java
│ └── utils/
│ └── InMemoryAppender.java
├── function-composition/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ ├── function-composition.urm.puml
│ │ └── function.composition.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── function/
│ │ └── composition/
│ │ ├── App.java
│ │ └── FunctionComposer.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── function/
│ └── composition/
│ ├── AppTest.java
│ └── FunctionComposerTest.java
├── game-loop/
│ ├── README.md
│ ├── etc/
│ │ └── game-loop.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── gameloop/
│ │ ├── App.java
│ │ ├── Bullet.java
│ │ ├── FixedStepGameLoop.java
│ │ ├── FrameBasedGameLoop.java
│ │ ├── GameController.java
│ │ ├── GameLoop.java
│ │ ├── GameStatus.java
│ │ └── VariableStepGameLoop.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── gameloop/
│ ├── AppTest.java
│ ├── FixedStepGameLoopTest.java
│ ├── FrameBasedGameLoopTest.java
│ ├── GameControllerTest.java
│ ├── GameLoopTest.java
│ └── VariableStepGameLoopTest.java
├── gateway/
│ ├── README.md
│ ├── etc/
│ │ └── gateway.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── gateway/
│ │ ├── App.java
│ │ ├── ExternalServiceA.java
│ │ ├── ExternalServiceB.java
│ │ ├── ExternalServiceC.java
│ │ ├── Gateway.java
│ │ └── GatewayFactory.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── gateway/
│ ├── AppTest.java
│ └── ServiceFactoryTest.java
├── guarded-suspension/
│ ├── README.md
│ ├── etc/
│ │ ├── guarded-suspension.ucls
│ │ └── guarded-suspension.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── guarded/
│ │ └── suspension/
│ │ ├── App.java
│ │ └── GuardedQueue.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── guarded/
│ └── suspension/
│ └── GuardedQueueTest.java
├── half-sync-half-async/
│ ├── README.md
│ ├── etc/
│ │ ├── half-sync-half-async.ucls
│ │ └── half-sync-half-async.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── halfsynchalfasync/
│ │ ├── App.java
│ │ ├── AsyncTask.java
│ │ └── AsynchronousService.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── halfsynchalfasync/
│ ├── AppTest.java
│ └── AsynchronousServiceTest.java
├── health-check/
│ ├── README.md
│ ├── etc/
│ │ ├── health-check.puml
│ │ └── health-check.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── health/
│ │ │ └── check/
│ │ │ ├── App.java
│ │ │ ├── AsynchronousHealthChecker.java
│ │ │ ├── CpuHealthIndicator.java
│ │ │ ├── CustomHealthIndicator.java
│ │ │ ├── DatabaseTransactionHealthIndicator.java
│ │ │ ├── GarbageCollectionHealthIndicator.java
│ │ │ ├── HealthCheck.java
│ │ │ ├── HealthCheckInterruptedException.java
│ │ │ ├── HealthCheckRepository.java
│ │ │ ├── MemoryHealthIndicator.java
│ │ │ └── RetryConfig.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ ├── AppTest.java
│ ├── AsynchronousHealthCheckerTest.java
│ ├── CpuHealthIndicatorTest.java
│ ├── CustomHealthIndicatorTest.java
│ ├── DatabaseTransactionHealthIndicatorTest.java
│ ├── GarbageCollectionHealthIndicatorTest.java
│ ├── HealthCheckRepositoryTest.java
│ ├── HealthEndpointIntegrationTest.java
│ ├── MemoryHealthIndicatorTest.java
│ └── RetryConfigTest.java
├── hexagonal-architecture/
│ ├── README.md
│ ├── etc/
│ │ ├── hexagonal-architecture.urm.puml
│ │ ├── hexagonal.ucls
│ │ └── hexagonal.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── hexagonal/
│ │ ├── App.java
│ │ ├── administration/
│ │ │ ├── ConsoleAdministration.java
│ │ │ ├── ConsoleAdministrationSrv.java
│ │ │ └── ConsoleAdministrationSrvImpl.java
│ │ ├── banking/
│ │ │ ├── InMemoryBank.java
│ │ │ ├── MongoBank.java
│ │ │ └── WireTransfers.java
│ │ ├── database/
│ │ │ ├── InMemoryTicketRepository.java
│ │ │ ├── LotteryTicketRepository.java
│ │ │ └── MongoTicketRepository.java
│ │ ├── domain/
│ │ │ ├── LotteryAdministration.java
│ │ │ ├── LotteryConstants.java
│ │ │ ├── LotteryNumbers.java
│ │ │ ├── LotteryService.java
│ │ │ ├── LotteryTicket.java
│ │ │ ├── LotteryTicketCheckResult.java
│ │ │ ├── LotteryTicketId.java
│ │ │ ├── LotteryUtils.java
│ │ │ └── PlayerDetails.java
│ │ ├── eventlog/
│ │ │ ├── LotteryEventLog.java
│ │ │ ├── MongoEventLog.java
│ │ │ └── StdOutEventLog.java
│ │ ├── module/
│ │ │ ├── LotteryModule.java
│ │ │ └── LotteryTestingModule.java
│ │ ├── mongo/
│ │ │ └── MongoConnectionPropertiesLoader.java
│ │ ├── sampledata/
│ │ │ └── SampleData.java
│ │ └── service/
│ │ ├── ConsoleLottery.java
│ │ ├── LotteryConsoleService.java
│ │ └── LotteryConsoleServiceImpl.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── hexagonal/
│ ├── AppTest.java
│ ├── banking/
│ │ ├── InMemoryBankTest.java
│ │ └── MongoBankTest.java
│ ├── database/
│ │ ├── InMemoryTicketRepositoryTest.java
│ │ └── MongoTicketRepositoryTest.java
│ ├── domain/
│ │ ├── LotteryNumbersTest.java
│ │ ├── LotteryTest.java
│ │ ├── LotteryTicketCheckResultTest.java
│ │ ├── LotteryTicketIdTest.java
│ │ ├── LotteryTicketTest.java
│ │ └── PlayerDetailsTest.java
│ ├── eventlog/
│ │ └── MongoEventLogTest.java
│ └── test/
│ └── LotteryTestUtils.java
├── identity-map/
│ ├── README.md
│ ├── etc/
│ │ └── identity-map.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── identitymap/
│ │ ├── App.java
│ │ ├── IdNotFoundException.java
│ │ ├── IdentityMap.java
│ │ ├── Person.java
│ │ ├── PersonDbSimulator.java
│ │ ├── PersonDbSimulatorImplementation.java
│ │ └── PersonFinder.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── identitymap/
│ ├── AppTest.java
│ ├── IdentityMapTest.java
│ ├── PersonDbSimulatorImplementationTest.java
│ ├── PersonFinderTest.java
│ └── PersonTest.java
├── intercepting-filter/
│ ├── README.md
│ ├── etc/
│ │ ├── intercepting-filter.ucls
│ │ └── intercepting-filter.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── intercepting/
│ │ └── filter/
│ │ ├── AbstractFilter.java
│ │ ├── AddressFilter.java
│ │ ├── App.java
│ │ ├── Client.java
│ │ ├── ContactFilter.java
│ │ ├── DepositFilter.java
│ │ ├── Filter.java
│ │ ├── FilterChain.java
│ │ ├── FilterManager.java
│ │ ├── NameFilter.java
│ │ ├── Order.java
│ │ ├── OrderFilter.java
│ │ └── Target.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── intercepting/
│ └── filter/
│ ├── AppTest.java
│ ├── FilterManagerTest.java
│ ├── FilterTest.java
│ ├── OrderTest.java
│ └── TargetTest.java
├── interpreter/
│ ├── README.md
│ ├── etc/
│ │ ├── interpreter.ucls
│ │ └── interpreter.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── interpreter/
│ │ ├── App.java
│ │ ├── Expression.java
│ │ ├── MinusExpression.java
│ │ ├── MultiplyExpression.java
│ │ ├── NumberExpression.java
│ │ └── PlusExpression.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── interpreter/
│ ├── AppTest.java
│ ├── ExpressionTest.java
│ ├── MinusExpressionTest.java
│ ├── MultiplyExpressionTest.java
│ ├── NumberExpressionTest.java
│ └── PlusExpressionTest.java
├── iterator/
│ ├── README.md
│ ├── etc/
│ │ ├── iterator.ucls
│ │ └── iterator.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── iterator/
│ │ ├── App.java
│ │ ├── Iterator.java
│ │ ├── bst/
│ │ │ ├── BstIterator.java
│ │ │ ├── README.md
│ │ │ └── TreeNode.java
│ │ └── list/
│ │ ├── Item.java
│ │ ├── ItemType.java
│ │ ├── TreasureChest.java
│ │ └── TreasureChestItemIterator.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── iterator/
│ ├── AppTest.java
│ ├── bst/
│ │ └── BstIteratorTest.java
│ └── list/
│ └── TreasureChestTest.java
├── layered-architecture/
│ ├── README.md
│ ├── etc/
│ │ ├── layers.ucls
│ │ └── layers.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── layers/
│ │ │ │ ├── Runner.java
│ │ │ │ └── app/
│ │ │ │ └── LayersApp.java
│ │ │ ├── dao/
│ │ │ │ ├── CakeDao.java
│ │ │ │ ├── CakeLayerDao.java
│ │ │ │ └── CakeToppingDao.java
│ │ │ ├── dto/
│ │ │ │ ├── CakeInfo.java
│ │ │ │ ├── CakeLayerInfo.java
│ │ │ │ └── CakeToppingInfo.java
│ │ │ ├── entity/
│ │ │ │ ├── Cake.java
│ │ │ │ ├── CakeLayer.java
│ │ │ │ └── CakeTopping.java
│ │ │ ├── exception/
│ │ │ │ └── CakeBakingException.java
│ │ │ ├── service/
│ │ │ │ ├── CakeBakingService.java
│ │ │ │ └── CakeBakingServiceImpl.java
│ │ │ └── view/
│ │ │ ├── CakeViewImpl.java
│ │ │ └── View.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── logback.xml
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── layers/
│ ├── app/
│ │ └── LayersAppTests.java
│ ├── entity/
│ │ └── CakeTest.java
│ ├── exception/
│ │ └── CakeBakingExceptionTest.java
│ ├── service/
│ │ └── CakeBakingServiceImplTest.java
│ └── view/
│ └── CakeViewImplTest.java
├── lazy-loading/
│ ├── README.md
│ ├── etc/
│ │ ├── lazy-loading.ucls
│ │ └── lazy-loading.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── lazy/
│ │ └── loading/
│ │ ├── App.java
│ │ ├── Heavy.java
│ │ ├── HolderNaive.java
│ │ ├── HolderThreadSafe.java
│ │ └── Java8Holder.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── lazy/
│ └── loading/
│ ├── AbstractHolderTest.java
│ ├── AppTest.java
│ ├── HolderNaiveTest.java
│ ├── HolderThreadSafeTest.java
│ └── Java8HolderTest.java
├── leader-election/
│ ├── README.md
│ ├── etc/
│ │ └── leader-election.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── leaderelection/
│ │ ├── AbstractInstance.java
│ │ ├── AbstractMessageManager.java
│ │ ├── Instance.java
│ │ ├── Message.java
│ │ ├── MessageManager.java
│ │ ├── MessageType.java
│ │ ├── bully/
│ │ │ ├── BullyApp.java
│ │ │ ├── BullyInstance.java
│ │ │ └── BullyMessageManager.java
│ │ └── ring/
│ │ ├── RingApp.java
│ │ ├── RingInstance.java
│ │ └── RingMessageManager.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── leaderelection/
│ ├── MessageTest.java
│ ├── bully/
│ │ ├── BullyAppTest.java
│ │ ├── BullyMessageManagerTest.java
│ │ └── BullyinstanceTest.java
│ └── ring/
│ ├── RingAppTest.java
│ ├── RingInstanceTest.java
│ └── RingMessageManagerTest.java
├── leader-followers/
│ ├── README.md
│ ├── etc/
│ │ └── leader-followers.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── leaderfollowers/
│ │ ├── App.java
│ │ ├── Task.java
│ │ ├── TaskHandler.java
│ │ ├── TaskSet.java
│ │ ├── WorkCenter.java
│ │ └── Worker.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── leaderfollowers/
│ ├── AppTest.java
│ ├── TaskHandlerTest.java
│ ├── TaskSetTest.java
│ └── WorkCenterTest.java
├── lgpl-3.0.txt
├── localization/
│ ├── ar/
│ │ ├── README.md
│ │ ├── abstract-document/
│ │ │ └── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── active-object/
│ │ │ └── README.md
│ │ ├── acyclic-visitor/
│ │ │ └── README.md
│ │ ├── adapter/
│ │ │ └── README.md
│ │ ├── aggregator-microservices/
│ │ │ └── README.md
│ │ ├── ambassador/
│ │ │ └── README.md
│ │ ├── api-gateway/
│ │ │ └── README.md
│ │ ├── arrange-act-assert/
│ │ │ └── README.md
│ │ ├── async-method-invocation/
│ │ │ └── README.md
│ │ ├── balking/
│ │ │ └── README.md
│ │ ├── bridge/
│ │ │ └── README.md
│ │ ├── builder/
│ │ │ └── README.md
│ │ ├── business-delegate/
│ │ │ └── README.md
│ │ ├── bytecode/
│ │ │ └── README.md
│ │ ├── chain-of-responsibility/
│ │ │ └── README.md
│ │ ├── client-session/
│ │ │ └── README.md
│ │ ├── collecting-parameter/
│ │ │ └── README.md
│ │ ├── command/
│ │ │ └── README.md
│ │ ├── commander/
│ │ │ └── README.md
│ │ ├── composite/
│ │ │ └── README.md
│ │ ├── composite-entity/
│ │ │ └── README.md
│ │ ├── composite-view/
│ │ │ └── README.md
│ │ ├── context-object/
│ │ │ └── README.md
│ │ ├── converter/
│ │ │ └── README.md
│ │ ├── crtp/
│ │ │ └── README.md
│ │ ├── data-locality/
│ │ │ └── README.md
│ │ ├── decorator/
│ │ │ └── README.md
│ │ ├── delegation/
│ │ │ └── README.md
│ │ ├── dependency-injection/
│ │ │ └── README.md
│ │ ├── dirty-flag/
│ │ │ └── README.md
│ │ ├── double-buffer/
│ │ │ └── README.md
│ │ ├── embedded-value/
│ │ │ └── README.md
│ │ ├── event-aggregator/
│ │ │ └── README.md
│ │ ├── extension-objects/
│ │ │ └── README.md
│ │ ├── facade/
│ │ │ └── README.md
│ │ └── factory/
│ │ └── README.md
│ ├── bn/
│ │ └── README.md
│ ├── da/
│ │ └── README.md
│ ├── de/
│ │ ├── README.md
│ │ └── abstract-document/
│ │ └── README.md
│ ├── el/
│ │ └── README.md
│ ├── es/
│ │ ├── README.md
│ │ ├── abstract-document/
│ │ │ └── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── active-object/
│ │ │ └── README.md
│ │ ├── acyclic-visitor/
│ │ │ └── README.md
│ │ ├── adapter/
│ │ │ └── README.md
│ │ ├── aggregator-microservices/
│ │ │ └── README.md
│ │ ├── ambassador/
│ │ │ └── README.md
│ │ ├── api-gateway/
│ │ │ └── README.md
│ │ ├── arrange-act-assert/
│ │ │ └── README.md
│ │ ├── async-method-invocation/
│ │ │ └── README.md
│ │ ├── balking/
│ │ │ └── README.md
│ │ ├── bridge/
│ │ │ └── README.md
│ │ ├── builder/
│ │ │ └── README.md
│ │ ├── business-delegate/
│ │ │ └── README.md
│ │ ├── bytecode/
│ │ │ └── README.md
│ │ ├── chain-of-responsibility/
│ │ │ └── README.md
│ │ ├── client-session/
│ │ │ └── README.md
│ │ ├── collecting-parameter/
│ │ │ └── README.md
│ │ ├── command/
│ │ │ └── README.md
│ │ ├── commander/
│ │ │ └── README.md
│ │ ├── composite/
│ │ │ └── README.md
│ │ ├── composite-entity/
│ │ │ └── README.md
│ │ ├── composite-view/
│ │ │ └── README.md
│ │ ├── context-object/
│ │ │ └── README.md
│ │ ├── converter/
│ │ │ └── README.md
│ │ ├── crtp/
│ │ │ └── README.md
│ │ ├── data-locality/
│ │ │ └── README.md
│ │ ├── decorator/
│ │ │ └── README.md
│ │ ├── delegation/
│ │ │ └── README.md
│ │ ├── dependency-injection/
│ │ │ └── README.md
│ │ ├── dirty-flag/
│ │ │ └── README.md
│ │ ├── double-buffer/
│ │ │ └── README.md
│ │ ├── embedded-value/
│ │ │ └── README.md
│ │ ├── event-aggregator/
│ │ │ └── README.md
│ │ ├── extension-objects/
│ │ │ └── README.md
│ │ ├── facade/
│ │ │ └── README.md
│ │ ├── factory/
│ │ │ └── README.md
│ │ ├── factory-kit/
│ │ │ └── README.md
│ │ ├── factory-method/
│ │ │ └── README.md
│ │ ├── feature-toggle/
│ │ │ └── README.md
│ │ ├── flux/
│ │ │ └── README.md
│ │ ├── flyweight/
│ │ │ └── README.md
│ │ ├── front-controller/
│ │ │ └── README.md
│ │ ├── game-loop/
│ │ │ └── README.md
│ │ ├── gateway/
│ │ │ └── README.md
│ │ ├── health-check/
│ │ │ └── README.md
│ │ ├── identity-map/
│ │ │ └── README.md
│ │ ├── intercepting-filter/
│ │ │ └── README.md
│ │ ├── interpreter/
│ │ │ └── README.md
│ │ ├── iterator/
│ │ │ └── README.md
│ │ ├── layers/
│ │ │ └── README.md
│ │ ├── lazy-loading/
│ │ │ └── README.md
│ │ ├── leader-election/
│ │ │ └── README.md
│ │ ├── map-reduce/
│ │ │ └── README.md
│ │ ├── marker/
│ │ │ └── README.md
│ │ ├── mediator/
│ │ │ └── README.md
│ │ ├── memento/
│ │ │ └── README.md
│ │ ├── module/
│ │ │ └── README.md
│ │ ├── monostate/
│ │ │ └── README.md
│ │ ├── multiton/
│ │ │ └── README.md
│ │ ├── null-object/
│ │ │ └── README.md
│ │ ├── object-mother/
│ │ │ └── README.md
│ │ ├── object-pool/
│ │ │ └── README.md
│ │ ├── observer/
│ │ │ └── README.md
│ │ ├── page-controller/
│ │ │ └── README.md
│ │ ├── page-object/
│ │ │ └── README.md
│ │ ├── parameter-object/
│ │ │ └── README.md
│ │ ├── partial-response/
│ │ │ └── README.md
│ │ ├── pipeline/
│ │ │ └── README.md
│ │ ├── poison-pill/
│ │ │ └── README.md
│ │ ├── presentation-model/
│ │ │ └── README.md
│ │ ├── priority-queue/
│ │ │ └── README.md
│ │ ├── property/
│ │ │ └── README.md
│ │ ├── prototype/
│ │ │ └── README.md
│ │ ├── proxy/
│ │ │ └── README.md
│ │ ├── registry/
│ │ │ └── README.md
│ │ ├── retry/
│ │ │ └── README.md
│ │ ├── role-object/
│ │ │ └── README.md
│ │ ├── separated-interface/
│ │ │ └── README.md
│ │ ├── servant/
│ │ │ └── README.md
│ │ ├── sharding/
│ │ │ └── README.md
│ │ ├── single-table-inheritance/
│ │ │ └── README.md
│ │ ├── singleton/
│ │ │ └── README.md
│ │ ├── spatial-partition/
│ │ │ └── README.md
│ │ ├── special-case/
│ │ │ └── README.md
│ │ ├── specification/
│ │ │ └── README.md
│ │ ├── state/
│ │ │ └── README.md
│ │ ├── step-builder/
│ │ │ └── README.md
│ │ ├── strangler/
│ │ │ └── README.md
│ │ ├── strategy/
│ │ │ └── README.md
│ │ ├── subclass-sandbox/
│ │ │ └── README.md
│ │ ├── table-module/
│ │ │ └── README.md
│ │ ├── template-method/
│ │ │ └── README.md
│ │ ├── throttling/
│ │ │ └── README.md
│ │ ├── trampoline/
│ │ │ └── README.md
│ │ ├── transaction-script/
│ │ │ └── README.md
│ │ ├── twin/
│ │ │ └── README.md
│ │ ├── typeobjectpattern/
│ │ │ └── README.md
│ │ ├── update-method/
│ │ │ └── README.md
│ │ ├── value-object/
│ │ │ └── README.md
│ │ └── visitor/
│ │ └── README.md
│ ├── fa/
│ │ ├── abstract-document/
│ │ │ └── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── active-object/
│ │ │ ├── README.md
│ │ │ └── etc/
│ │ │ └── active-object.urm.puml
│ │ └── factory/
│ │ └── README.md
│ ├── fr/
│ │ ├── README.md
│ │ ├── abstract-document/
│ │ │ └── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── active-object/
│ │ │ └── README.md
│ │ ├── acyclic-visitore/
│ │ │ └── README.md
│ │ ├── adapter/
│ │ │ └── README.md
│ │ ├── aggregator-microservices/
│ │ │ └── README.md
│ │ ├── ambassador/
│ │ │ └── README.md
│ │ ├── anti-corruption-layer/
│ │ │ └── README.md
│ │ ├── api-gateway/
│ │ │ └── README.md
│ │ ├── arrange-act-assert/
│ │ │ └── README.md
│ │ ├── async-method-invocation/
│ │ │ └── README.md
│ │ ├── balking/
│ │ │ └── README.md
│ │ ├── bridge/
│ │ │ └── README.md
│ │ ├── builder/
│ │ │ └── README.md
│ │ └── business-delegate/
│ │ └── README.md
│ ├── hi/
│ │ ├── README.md
│ │ ├── abstract-document/
│ │ │ └── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── active-object/
│ │ │ └── README.md
│ │ ├── acyclic-visitor/
│ │ │ └── README.md
│ │ ├── adapter/
│ │ │ └── README.md
│ │ ├── aggregator-microservices/
│ │ │ └── README.md
│ │ ├── ambassador/
│ │ │ └── README.md
│ │ ├── api-gateway/
│ │ │ └── README.md
│ │ ├── arrange-act-assert/
│ │ │ └── README.md
│ │ ├── async-method-invocation/
│ │ │ └── README.md
│ │ ├── balking/
│ │ │ └── README.md
│ │ ├── bridge/
│ │ │ └── README.md
│ │ ├── builder/
│ │ │ └── README.md
│ │ ├── business-delegate/
│ │ │ └── README.md
│ │ ├── bytecode/
│ │ │ └── README.md
│ │ ├── caching/
│ │ │ └── README.md
│ │ ├── callback/
│ │ │ └── README.md
│ │ ├── chain-of-responsibility/
│ │ │ └── README.md
│ │ ├── circuit-breaker/
│ │ │ └── README.md
│ │ ├── client-session/
│ │ │ └── README.md
│ │ ├── collecting-parameter/
│ │ │ └── README.md
│ │ ├── collection-pipeline/
│ │ │ └── README.md
│ │ ├── combinator/
│ │ │ └── README.md
│ │ ├── command/
│ │ │ └── README.md
│ │ ├── factory-method/
│ │ │ └── README.md
│ │ └── module/
│ │ └── README.md
│ ├── id/
│ │ ├── README.md
│ │ └── decorator/
│ │ └── README.md
│ ├── it/
│ │ ├── README.md
│ │ ├── abstract-document/
│ │ │ └── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── active-object/
│ │ │ └── README.md
│ │ ├── acyclic-visitor/
│ │ │ └── README.md
│ │ ├── adapter/
│ │ │ └── README.md
│ │ ├── iterator/
│ │ │ └── README.md
│ │ └── observer/
│ │ └── README.md
│ ├── ja/
│ │ ├── README.md
│ │ └── decorator/
│ │ └── README.md
│ ├── ko/
│ │ ├── README.md
│ │ ├── adapter/
│ │ │ └── README.md
│ │ ├── builder/
│ │ │ └── README.md
│ │ ├── callback/
│ │ │ └── README.md
│ │ ├── decorater/
│ │ │ └── README.md
│ │ ├── event-driven-architecture/
│ │ │ └── README.md
│ │ ├── event-sourcing/
│ │ │ └── README.md
│ │ ├── facade/
│ │ │ └── README.md
│ │ ├── factory/
│ │ │ └── README.md
│ │ ├── factory-method/
│ │ │ └── README.md
│ │ ├── iterator/
│ │ │ └── README.md
│ │ ├── observer/
│ │ │ └── README.md
│ │ ├── prototype/
│ │ │ └── README.md
│ │ ├── proxy/
│ │ │ └── README.md
│ │ ├── singleton/
│ │ │ └── README.md
│ │ ├── strategy/
│ │ │ └── README.md
│ │ ├── template-method/
│ │ │ └── README.md
│ │ └── visitor/
│ │ └── README.md
│ ├── mr/
│ │ └── README.md
│ ├── ne/
│ │ └── README.md
│ ├── pt/
│ │ ├── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── adapter/
│ │ │ └── README.md
│ │ ├── builder/
│ │ │ └── README.md
│ │ ├── caching/
│ │ │ └── README.md
│ │ ├── chain-of-responsability/
│ │ │ └── README.md
│ │ ├── facade/
│ │ │ └── README.md
│ │ ├── factory/
│ │ │ └── README.md
│ │ ├── proxy/
│ │ │ └── README.md
│ │ └── singleton/
│ │ └── README.md
│ ├── ru/
│ │ ├── README.md
│ │ └── abstract-factory/
│ │ └── README.md
│ ├── si/
│ │ └── README.md
│ ├── tr/
│ │ ├── README.md
│ │ └── singleton/
│ │ └── README.md
│ ├── ur/
│ │ ├── README.md
│ │ ├── abstract-document/
│ │ │ └── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── active-object/
│ │ │ └── README.md
│ │ └── acyclic-visitor/
│ │ └── README.md
│ ├── vi/
│ │ ├── README.md
│ │ ├── abstract-document/
│ │ │ └── README.md
│ │ ├── abstract-factory/
│ │ │ └── README.md
│ │ ├── active-object/
│ │ │ └── README.md
│ │ ├── acyclic-visitor/
│ │ │ └── README.md
│ │ ├── adapter/
│ │ │ └── README.md
│ │ ├── aggregator-microservices/
│ │ │ └── README.md
│ │ ├── builder/
│ │ │ └── README.md
│ │ └── game-loop/
│ │ └── README.md
│ └── zh/
│ ├── README.md
│ ├── abstract-document/
│ │ └── README.md
│ ├── abstract-factory/
│ │ └── README.md
│ ├── active-object/
│ │ └── README.md
│ ├── acyclic-visitor/
│ │ └── README.md
│ ├── adapter/
│ │ └── README.md
│ ├── aggregator-microservices/
│ │ └── README.md
│ ├── ambassador/
│ │ └── README.md
│ ├── api-gateway/
│ │ └── README.md
│ ├── arrange-act-assert/
│ │ └── README.md
│ ├── async-method-invocation/
│ │ └── README.md
│ ├── balking/
│ │ └── README.md
│ ├── bridge/
│ │ └── README.md
│ ├── builder/
│ │ └── README.md
│ ├── business-delegate/
│ │ └── README.md
│ ├── bytecode/
│ │ └── README.md
│ ├── caching/
│ │ └── README.md
│ ├── callback/
│ │ └── README.md
│ ├── chain/
│ │ └── README.md
│ ├── circuit-breaker/
│ │ └── README.md
│ ├── cloud-static-content-hosting/
│ │ └── README.md
│ ├── collection-pipeline/
│ │ └── README.md
│ ├── combinator/
│ │ └── README.md
│ ├── command/
│ │ └── README.md
│ ├── commander/
│ │ └── README.md
│ ├── composite/
│ │ └── README.md
│ ├── composite-entity/
│ │ └── README.md
│ ├── converter/
│ │ └── README.md
│ ├── crtp/
│ │ └── README.md
│ ├── dao/
│ │ └── README.md
│ ├── data-bus/
│ │ └── README.md
│ ├── data-mapper/
│ │ └── README.md
│ ├── data-transfer-object/
│ │ └── README.md
│ ├── decorator/
│ │ └── README.md
│ ├── delegation/
│ │ └── README.md
│ ├── dependency-injection/
│ │ └── README.md
│ ├── dirty-flag/
│ │ └── README.md
│ ├── double-checked-locking/
│ │ └── README.md
│ ├── facade/
│ │ └── README.md
│ ├── factory/
│ │ └── README.md
│ ├── factory-kit/
│ │ └── README.md
│ ├── factory-method/
│ │ └── README.md
│ ├── interpreter/
│ │ └── README.md
│ ├── iterator/
│ │ └── README.md
│ ├── monitor/
│ │ └── README.md
│ ├── observer/
│ │ └── README.md
│ ├── private-class-data/
│ │ └── README.md
│ ├── producer-consumer/
│ │ └── README.md
│ ├── proxy/
│ │ └── README.md
│ ├── servant/
│ │ └── README.md
│ ├── sharding/
│ │ └── README.md
│ ├── singleton/
│ │ └── README.md
│ ├── state/
│ │ └── README.md
│ ├── step-builder/
│ │ └── README.md
│ ├── strategy/
│ │ └── README.md
│ ├── table-module/
│ │ └── README.md
│ ├── template-method/
│ │ └── README.md
│ ├── trampoline/
│ │ └── README.md
│ ├── unit-of-work/
│ │ └── README.md
│ ├── update-method/
│ │ └── README.md
│ ├── value-object/
│ │ └── README.md
│ ├── version-number/
│ │ └── README.md
│ └── visitor/
│ └── README.md
├── lockable-object/
│ ├── README.md
│ ├── etc/
│ │ └── lockable-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── lockableobject/
│ │ ├── App.java
│ │ ├── Lockable.java
│ │ ├── LockingException.java
│ │ ├── SwordOfAragorn.java
│ │ └── domain/
│ │ ├── Creature.java
│ │ ├── CreatureStats.java
│ │ ├── CreatureType.java
│ │ ├── Elf.java
│ │ ├── Feind.java
│ │ ├── Human.java
│ │ └── Orc.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── lockableobject/
│ ├── AppTest.java
│ ├── CreatureTest.java
│ ├── ExceptionsTest.java
│ ├── FeindTest.java
│ ├── SubCreaturesTests.java
│ └── TheSwordOfAragornTest.java
├── lombok.config
├── map-reduce/
│ ├── README.md
│ ├── etc/
│ │ └── map-reduce.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ ├── Main.java
│ │ ├── MapReduce.java
│ │ ├── Mapper.java
│ │ ├── Reducer.java
│ │ └── Shuffler.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ ├── MapReduceTest.java
│ ├── MapperTest.java
│ ├── ReducerTest.java
│ └── ShufflerTest.java
├── marker-interface/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ ├── MarkerDiagram.ucls
│ │ ├── marker-interface.urm.puml
│ │ └── marker.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ ├── App.java
│ │ ├── Guard.java
│ │ ├── Permission.java
│ │ └── Thief.java
│ └── test/
│ └── java/
│ ├── AppTest.java
│ ├── GuardTest.java
│ └── ThiefTest.java
├── master-worker/
│ ├── README.md
│ ├── etc/
│ │ ├── master-worker-pattern.urm.puml
│ │ └── master-worker.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── masterworker/
│ │ ├── App.java
│ │ ├── ArrayInput.java
│ │ ├── ArrayResult.java
│ │ ├── ArrayUtilityMethods.java
│ │ ├── Input.java
│ │ ├── Result.java
│ │ └── system/
│ │ ├── ArrayTransposeMasterWorker.java
│ │ ├── MasterWorker.java
│ │ ├── systemmaster/
│ │ │ ├── ArrayTransposeMaster.java
│ │ │ └── Master.java
│ │ └── systemworkers/
│ │ ├── ArrayTransposeWorker.java
│ │ └── Worker.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── masterworker/
│ ├── ArrayInputTest.java
│ ├── ArrayUtilityMethodsTest.java
│ └── system/
│ ├── ArrayTransposeMasterWorkerTest.java
│ └── systemworkers/
│ └── ArrayTransposeWorkerTest.java
├── mediator/
│ ├── README.md
│ ├── etc/
│ │ ├── mediator.ucls
│ │ └── mediator.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── mediator/
│ │ ├── Action.java
│ │ ├── App.java
│ │ ├── Hobbit.java
│ │ ├── Hunter.java
│ │ ├── Party.java
│ │ ├── PartyImpl.java
│ │ ├── PartyMember.java
│ │ ├── PartyMemberBase.java
│ │ ├── Rogue.java
│ │ └── Wizard.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── mediator/
│ ├── AppTest.java
│ ├── PartyImplTest.java
│ └── PartyMemberTest.java
├── memento/
│ ├── README.md
│ ├── etc/
│ │ ├── memento.ucls
│ │ └── memento.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── memento/
│ │ ├── App.java
│ │ ├── Star.java
│ │ ├── StarMemento.java
│ │ └── StarType.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── memento/
│ ├── AppTest.java
│ └── StarTest.java
├── metadata-mapping/
│ ├── README.md
│ ├── etc/
│ │ ├── metadata-mapping.urm.puml
│ │ └── metamapping.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── metamapping/
│ │ │ ├── App.java
│ │ │ ├── model/
│ │ │ │ └── User.java
│ │ │ ├── service/
│ │ │ │ └── UserService.java
│ │ │ └── utils/
│ │ │ ├── DatabaseUtil.java
│ │ │ └── HibernateUtil.java
│ │ └── resources/
│ │ ├── com/
│ │ │ └── iluwatar/
│ │ │ └── metamapping/
│ │ │ └── model/
│ │ │ └── User.hbm.xml
│ │ ├── hibernate.cfg.xml
│ │ └── logback.xml
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── metamapping/
│ └── AppTest.java
├── microservices-aggregrator/
│ ├── README.md
│ ├── aggregator-service/
│ │ ├── etc/
│ │ │ └── aggregator-service.urm.puml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── aggregator/
│ │ │ │ └── microservices/
│ │ │ │ ├── Aggregator.java
│ │ │ │ ├── App.java
│ │ │ │ ├── Product.java
│ │ │ │ ├── ProductInformationClient.java
│ │ │ │ ├── ProductInformationClientImpl.java
│ │ │ │ ├── ProductInventoryClient.java
│ │ │ │ └── ProductInventoryClientImpl.java
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── aggregator/
│ │ └── microservices/
│ │ └── AggregatorTest.java
│ ├── etc/
│ │ ├── aggregator-microservices.urm.puml
│ │ └── microservices-aggregrator.urm.puml
│ ├── information-microservice/
│ │ ├── etc/
│ │ │ └── information-microservice.urm.puml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── information/
│ │ │ │ └── microservice/
│ │ │ │ ├── InformationApplication.java
│ │ │ │ └── InformationController.java
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── information/
│ │ └── microservice/
│ │ └── InformationControllerTest.java
│ ├── inventory-microservice/
│ │ ├── etc/
│ │ │ └── inventory-microservice.urm.puml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── inventory/
│ │ │ │ └── microservice/
│ │ │ │ ├── InventoryApplication.java
│ │ │ │ └── InventoryController.java
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── inventory/
│ │ └── microservice/
│ │ └── InventoryControllerTest.java
│ └── pom.xml
├── microservices-api-gateway/
│ ├── README.md
│ ├── api-gateway-service/
│ │ ├── etc/
│ │ │ └── api-gateway-service.urm.puml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── api/
│ │ │ │ └── gateway/
│ │ │ │ ├── ApiGateway.java
│ │ │ │ ├── App.java
│ │ │ │ ├── DesktopProduct.java
│ │ │ │ ├── ImageClient.java
│ │ │ │ ├── ImageClientImpl.java
│ │ │ │ ├── MobileProduct.java
│ │ │ │ ├── PriceClient.java
│ │ │ │ └── PriceClientImpl.java
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── api/
│ │ └── gateway/
│ │ └── ApiGatewayTest.java
│ ├── etc/
│ │ ├── api-gateway.ucls
│ │ ├── api-gateway.urm.puml
│ │ └── microservices-api-gateway.urm.puml
│ ├── image-microservice/
│ │ ├── etc/
│ │ │ ├── image-microservice.ucls
│ │ │ └── image-microservice.urm.puml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── image/
│ │ │ │ └── microservice/
│ │ │ │ ├── ImageApplication.java
│ │ │ │ └── ImageController.java
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── image/
│ │ └── microservice/
│ │ └── ImageControllerTest.java
│ ├── pom.xml
│ └── price-microservice/
│ ├── etc/
│ │ ├── price-microservice.ucls
│ │ └── price-microservice.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── price/
│ │ │ └── microservice/
│ │ │ ├── PriceApplication.java
│ │ │ ├── PriceController.java
│ │ │ ├── PriceService.java
│ │ │ └── PriceServiceImpl.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── price/
│ └── microservice/
│ ├── PriceControllerTest.java
│ └── PriceServiceTest.java
├── microservices-client-side-ui-composition/
│ ├── README.md
│ ├── etc/
│ │ ├── client-side-ui-composition.urm.puml
│ │ └── microservices-client-side-ui-composition.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── clientsideuicomposition/
│ │ ├── ApiGateway.java
│ │ ├── CartFrontend.java
│ │ ├── ClientSideIntegrator.java
│ │ ├── FrontendComponent.java
│ │ └── ProductFrontend.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── clientsideuicomposition/
│ └── ClientSideCompositionTest.java
├── microservices-distributed-tracing/
│ ├── README.md
│ ├── etc/
│ │ ├── microservices-distributed-tracing.puml
│ │ └── microservices-distributed-tracing.urm.puml
│ ├── order-microservice/
│ │ ├── etc/
│ │ │ ├── order-microservice.puml
│ │ │ └── order-microservice.urm.puml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── order/
│ │ │ │ └── microservice/
│ │ │ │ ├── Main.java
│ │ │ │ ├── OrderController.java
│ │ │ │ └── OrderService.java
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── order/
│ │ └── microservice/
│ │ ├── MainTest.java
│ │ ├── OrderControllerTest.java
│ │ └── OrderServiceTest.java
│ ├── payment-microservice/
│ │ ├── etc/
│ │ │ ├── payment-microservice.puml
│ │ │ └── payment-microservice.urm.puml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── payment/
│ │ │ │ └── microservice/
│ │ │ │ ├── Main.java
│ │ │ │ └── PaymentController.java
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── payment/
│ │ └── microservice/
│ │ ├── MainTest.java
│ │ └── ProductControllerTest.java
│ ├── pom.xml
│ └── product-microservice/
│ ├── etc/
│ │ ├── product-microservice.puml
│ │ └── product-microservice.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── product/
│ │ │ └── microservice/
│ │ │ └── microservice/
│ │ │ ├── Main.java
│ │ │ └── ProductController.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── product/
│ └── microservice/
│ ├── MainTest.java
│ └── ProductControllerTest.java
├── microservices-idempotent-consumer/
│ ├── README.md
│ ├── etc/
│ │ └── microservices-idempotent-consumer.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── idempotentconsumer/
│ │ ├── App.java
│ │ ├── InvalidNextStateException.java
│ │ ├── Request.java
│ │ ├── RequestNotFoundException.java
│ │ ├── RequestRepository.java
│ │ ├── RequestService.java
│ │ └── RequestStateMachine.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── idempotentconsumer/
│ ├── AppTest.java
│ ├── RequestServiceTests.java
│ └── RequestStateMachineTests.java
├── microservices-log-aggregation/
│ ├── README.md
│ ├── etc/
│ │ ├── log-aggregation.puml
│ │ ├── log-aggregation.urm.puml
│ │ └── microservices-log-aggregation.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── logaggregation/
│ │ ├── App.java
│ │ ├── CentralLogStore.java
│ │ ├── LogAggregator.java
│ │ ├── LogEntry.java
│ │ ├── LogLevel.java
│ │ └── LogProducer.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── logaggregation/
│ └── LogAggregatorTest.java
├── microservices-self-registration/
│ ├── README.md
│ ├── contextservice/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── learning/
│ │ │ │ └── contextservice/
│ │ │ │ ├── ContextserviceApplication.java
│ │ │ │ ├── MyCustomHealthCheck.java
│ │ │ │ ├── client/
│ │ │ │ │ └── GreetingServiceClient.java
│ │ │ │ └── controller/
│ │ │ │ └── ContextController.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── learning/
│ │ └── contextservice/
│ │ ├── ContextControllerTest.java
│ │ ├── ContextserviceApplicationTests.java
│ │ ├── TestConfig.java
│ │ └── myCustomHealthCheckTest.java
│ ├── eurekaserver/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── learning/
│ │ │ │ └── eurekaserver/
│ │ │ │ └── EurekaserverApplication.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── learning/
│ │ └── eurekaserver/
│ │ └── EurekaserverApplicationTests.java
│ ├── greetingservice/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── learning/
│ │ │ │ └── greetingservice/
│ │ │ │ ├── GreetingserviceApplication.java
│ │ │ │ ├── MyCustomHealthCheck.java
│ │ │ │ └── controller/
│ │ │ │ └── GreetingsController.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── learning/
│ │ └── greetingservice/
│ │ ├── GreetingserviceApplicationTests.java
│ │ ├── MyCustomHealthCheckTest.java
│ │ └── controller/
│ │ └── GreetingControllerTest.java
│ └── pom.xml
├── model-view-controller/
│ ├── README.md
│ ├── etc/
│ │ ├── model-view-controller.ucls
│ │ └── model-view-controller.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── model/
│ │ └── view/
│ │ └── controller/
│ │ ├── App.java
│ │ ├── Fatigue.java
│ │ ├── GiantController.java
│ │ ├── GiantModel.java
│ │ ├── GiantView.java
│ │ ├── Health.java
│ │ └── Nourishment.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── model/
│ └── view/
│ └── controller/
│ ├── AppTest.java
│ ├── GiantControllerTest.java
│ ├── GiantModelTest.java
│ └── GiantViewTest.java
├── model-view-intent/
│ ├── README.md
│ ├── etc/
│ │ └── model-view-intent.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── model/
│ │ └── view/
│ │ └── intent/
│ │ ├── App.java
│ │ ├── CalculatorModel.java
│ │ ├── CalculatorView.java
│ │ ├── CalculatorViewModel.java
│ │ ├── actions/
│ │ │ ├── AdditionCalculatorAction.java
│ │ │ ├── CalculatorAction.java
│ │ │ ├── DivisionCalculatorAction.java
│ │ │ ├── MultiplicationCalculatorAction.java
│ │ │ ├── SetVariableCalculatorAction.java
│ │ │ ├── SubtractionCalculatorAction.java
│ │ │ └── package-info.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── model/
│ └── view/
│ └── intent/
│ ├── AppTest.java
│ └── CalculatorViewModelTest.java
├── model-view-presenter/
│ ├── README.md
│ ├── etc/
│ │ ├── data/
│ │ │ └── test.txt
│ │ ├── model-view-presenter.ucls
│ │ └── model-view-presenter.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── model/
│ │ └── view/
│ │ └── presenter/
│ │ ├── App.java
│ │ ├── FileLoader.java
│ │ ├── FileSelectorJframe.java
│ │ ├── FileSelectorPresenter.java
│ │ ├── FileSelectorStub.java
│ │ └── FileSelectorView.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── model/
│ └── view/
│ └── presenter/
│ ├── AppTest.java
│ ├── FileLoaderTest.java
│ ├── FileSelectorJframeTest.java
│ └── FileSelectorPresenterTest.java
├── model-view-viewmodel/
│ ├── README.md
│ ├── etc/
│ │ └── model-view-viewmodel.urm.puml
│ ├── lombok.config
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── assembly/
│ │ │ └── webapp.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── model/
│ │ │ └── view/
│ │ │ └── viewmodel/
│ │ │ ├── Book.java
│ │ │ ├── BookService.java
│ │ │ ├── BookServiceImpl.java
│ │ │ └── BookViewModel.java
│ │ └── webapp/
│ │ ├── META-INF/
│ │ │ └── MANIFEST.MF
│ │ ├── WEB-INF/
│ │ │ └── web.xml
│ │ └── index.zul
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── model/
│ └── view/
│ └── viewmodel/
│ └── BookTest.java
├── monad/
│ ├── README.md
│ ├── etc/
│ │ ├── monad.ucls
│ │ └── monad.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── monad/
│ │ ├── App.java
│ │ ├── Sex.java
│ │ ├── User.java
│ │ └── Validator.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── monad/
│ ├── AppTest.java
│ └── MonadTest.java
├── money/
│ ├── README.md
│ ├── etc/
│ │ └── money.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ ├── App.java
│ │ ├── CannotAddTwoCurrienciesException.java
│ │ ├── CannotSubtractException.java
│ │ └── Money.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwater/
│ └── money/
│ └── MoneyTest.java
├── monitor/
│ ├── README.md
│ ├── etc/
│ │ └── monitor.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── monitor/
│ │ ├── Bank.java
│ │ └── Main.java
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── monitor/
│ │ ├── BankTest.java
│ │ └── MainTest.java
│ └── resources/
│ └── logback.xml
├── monolithic-architecture/
│ ├── README.md
│ ├── etc/
│ │ ├── Monolithic-Ecommerce.urm.puml
│ │ └── monolithic-architecture.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── monolithic/
│ │ │ ├── EcommerceApp.java
│ │ │ ├── controller/
│ │ │ │ ├── OrderController.java
│ │ │ │ ├── ProductController.java
│ │ │ │ └── UserController.java
│ │ │ ├── exceptions/
│ │ │ │ ├── InsufficientStockException.java
│ │ │ │ ├── NonExistentProductException.java
│ │ │ │ └── NonExistentUserException.java
│ │ │ ├── model/
│ │ │ │ ├── Order.java
│ │ │ │ ├── Product.java
│ │ │ │ └── User.java
│ │ │ └── repository/
│ │ │ ├── OrderRepository.java
│ │ │ ├── ProductRepository.java
│ │ │ └── UserRepository.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── monolithic/
│ └── MonolithicAppTest.java
├── monostate/
│ ├── README.md
│ ├── etc/
│ │ ├── MonoState.ucls
│ │ └── monostate.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── monostate/
│ │ ├── App.java
│ │ ├── LoadBalancer.java
│ │ ├── Request.java
│ │ └── Server.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── monostate/
│ ├── AppTest.java
│ └── LoadBalancerTest.java
├── multiton/
│ ├── README.md
│ ├── etc/
│ │ ├── multiton.ucls
│ │ └── multiton.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── multiton/
│ │ ├── App.java
│ │ ├── Nazgul.java
│ │ ├── NazgulEnum.java
│ │ └── NazgulName.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── multiton/
│ ├── AppTest.java
│ ├── NazgulEnumTest.java
│ └── NazgulTest.java
├── mute-idiom/
│ ├── README.md
│ ├── etc/
│ │ ├── mute-idiom.ucls
│ │ └── mute-idiom.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── mute/
│ │ ├── App.java
│ │ ├── CheckedRunnable.java
│ │ ├── Mute.java
│ │ └── Resource.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── mute/
│ ├── AppTest.java
│ └── MuteTest.java
├── mvnw
├── mvnw.cmd
├── naked-objects/
│ └── README.md
├── notification/
│ ├── README.md
│ ├── etc/
│ │ └── notification.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ ├── App.java
│ │ ├── DataTransferObject.java
│ │ ├── Notification.java
│ │ ├── NotificationError.java
│ │ ├── RegisterWorker.java
│ │ ├── RegisterWorkerDto.java
│ │ ├── RegisterWorkerForm.java
│ │ ├── RegisterWorkerService.java
│ │ └── ServerCommand.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ ├── AppTest.java
│ ├── RegisterWorkerFormTest.java
│ └── RegisterWorkerTest.java
├── null-object/
│ ├── README.md
│ ├── etc/
│ │ ├── null-object.ucls
│ │ └── null-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── nullobject/
│ │ ├── App.java
│ │ ├── Node.java
│ │ ├── NodeImpl.java
│ │ └── NullNode.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── nullobject/
│ ├── AppTest.java
│ ├── NullNodeTest.java
│ └── TreeTest.java
├── object-mother/
│ ├── README.md
│ ├── etc/
│ │ ├── object-mother.ucls
│ │ └── object-mother.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── objectmother/
│ │ ├── King.java
│ │ ├── Queen.java
│ │ ├── Royalty.java
│ │ └── RoyaltyObjectMother.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── objectmother/
│ └── test/
│ └── RoyaltyObjectMotherTest.java
├── object-pool/
│ ├── README.md
│ ├── etc/
│ │ ├── object-pool.ucls
│ │ └── object-pool.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── object/
│ │ └── pool/
│ │ ├── App.java
│ │ ├── ObjectPool.java
│ │ ├── Oliphaunt.java
│ │ └── OliphauntPool.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── object/
│ └── pool/
│ ├── AppTest.java
│ └── OliphauntPoolTest.java
├── observer/
│ ├── README.md
│ ├── etc/
│ │ ├── observer.ucls
│ │ └── observer.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── observer/
│ │ ├── App.java
│ │ ├── Hobbits.java
│ │ ├── Orcs.java
│ │ ├── Weather.java
│ │ ├── WeatherObserver.java
│ │ ├── WeatherType.java
│ │ └── generic/
│ │ ├── GenHobbits.java
│ │ ├── GenOrcs.java
│ │ ├── GenWeather.java
│ │ ├── Observable.java
│ │ ├── Observer.java
│ │ └── Race.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── observer/
│ ├── AppTest.java
│ ├── HobbitsTest.java
│ ├── OrcsTest.java
│ ├── WeatherObserverTest.java
│ ├── WeatherTest.java
│ ├── generic/
│ │ ├── GHobbitsTest.java
│ │ ├── GWeatherTest.java
│ │ ├── ObserverTest.java
│ │ └── OrcsTest.java
│ └── utils/
│ └── InMemoryAppender.java
├── optimistic-offline-lock/
│ ├── README.md
│ ├── etc/
│ │ └── optimistic-offline-lock.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ ├── api/
│ │ │ └── UpdateService.java
│ │ ├── exception/
│ │ │ └── ApplicationException.java
│ │ ├── model/
│ │ │ └── Card.java
│ │ ├── repository/
│ │ │ └── JpaRepository.java
│ │ └── service/
│ │ └── CardUpdateService.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── OptimisticLockTest.java
├── page-controller/
│ ├── README.md
│ ├── etc/
│ │ └── page-controller.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── page/
│ │ │ └── controller/
│ │ │ ├── App.java
│ │ │ ├── SignupController.java
│ │ │ ├── SignupModel.java
│ │ │ ├── SignupView.java
│ │ │ ├── UserController.java
│ │ │ ├── UserModel.java
│ │ │ └── UserView.java
│ │ └── resources/
│ │ ├── application.properties
│ │ └── templates/
│ │ ├── signup.html
│ │ └── user.html
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── page/
│ └── controller/
│ ├── AppTest.java
│ ├── SignupControllerTest.java
│ ├── SignupModelTest.java
│ ├── UserControllerTest.java
│ └── UserModelTest.java
├── page-object/
│ ├── README.md
│ ├── etc/
│ │ ├── page-object.ucls
│ │ └── page-object.urm.puml
│ ├── pom.xml
│ ├── sample-application/
│ │ ├── etc/
│ │ │ ├── page-object.ucls
│ │ │ └── sample-application.urm.puml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── pageobject/
│ │ │ └── App.java
│ │ └── resources/
│ │ └── sample-ui/
│ │ ├── album-list.html
│ │ ├── album-page.html
│ │ ├── css/
│ │ │ ├── album-list.css
│ │ │ └── style.css
│ │ └── login.html
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── iluwatar/
│ │ │ │ └── pageobject/
│ │ │ │ └── App.java
│ │ │ └── resources/
│ │ │ └── sample-ui/
│ │ │ ├── album-list.html
│ │ │ ├── album-page.html
│ │ │ ├── css/
│ │ │ │ ├── album-list.css
│ │ │ │ └── style.css
│ │ │ └── login.html
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── pageobject/
│ │ ├── AlbumListPageTest.java
│ │ ├── AlbumPageTest.java
│ │ ├── LoginPageTest.java
│ │ └── pages/
│ │ ├── AlbumListPage.java
│ │ ├── AlbumPage.java
│ │ ├── LoginPage.java
│ │ └── Page.java
│ └── test-automation/
│ ├── etc/
│ │ └── test-automation.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── pageobject/
│ │ ├── AlbumListPage.java
│ │ ├── AlbumPage.java
│ │ ├── LoginPage.java
│ │ └── Page.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── pageobject/
│ ├── AlbumListPageTest.java
│ ├── AlbumPageTest.java
│ └── LoginPageTest.java
├── parameter-object/
│ ├── README.md
│ ├── etc/
│ │ └── parameter-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── parameter/
│ │ └── object/
│ │ ├── App.java
│ │ ├── ParameterObject.java
│ │ ├── SearchService.java
│ │ └── SortOrder.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── parameter/
│ └── object/
│ ├── AppTest.java
│ ├── ParameterObjectTest.java
│ └── SearchServiceTest.java
├── partial-response/
│ ├── README.md
│ ├── etc/
│ │ ├── partial-response.ucls
│ │ └── partial-response.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── partialresponse/
│ │ ├── App.java
│ │ ├── FieldJsonMapper.java
│ │ ├── Video.java
│ │ └── VideoResource.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── partialresponse/
│ ├── AppTest.java
│ ├── FieldJsonMapperTest.java
│ └── VideoResourceTest.java
├── pipeline/
│ ├── README.md
│ ├── etc/
│ │ └── pipeline.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── pipeline/
│ │ ├── App.java
│ │ ├── ConvertToCharArrayHandler.java
│ │ ├── Handler.java
│ │ ├── Pipeline.java
│ │ ├── RemoveAlphabetsHandler.java
│ │ └── RemoveDigitsHandler.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── pipeline/
│ ├── AppTest.java
│ └── PipelineTest.java
├── poison-pill/
│ ├── README.md
│ ├── etc/
│ │ ├── poison-pill.ucls
│ │ └── poison-pill.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── poison/
│ │ └── pill/
│ │ ├── App.java
│ │ ├── Consumer.java
│ │ ├── Message.java
│ │ ├── MessageQueue.java
│ │ ├── MqPublishPoint.java
│ │ ├── MqSubscribePoint.java
│ │ ├── Producer.java
│ │ ├── SimpleMessage.java
│ │ └── SimpleMessageQueue.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── poison/
│ └── pill/
│ ├── AppTest.java
│ ├── ConsumerTest.java
│ ├── PoisonMessageTest.java
│ ├── ProducerTest.java
│ └── SimpleMessageTest.java
├── pom.xml
├── presentation-model/
│ ├── README.md
│ ├── etc/
│ │ ├── presentation-model.urm.puml
│ │ └── presentation.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── presentationmodel/
│ │ ├── Album.java
│ │ ├── App.java
│ │ ├── DisplayedAlbums.java
│ │ ├── PresentationModel.java
│ │ └── View.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── presentationmodel/
│ ├── AlbumTest.java
│ ├── AppTest.java
│ ├── DisplayedAlbumsTest.java
│ ├── PresentationTest.java
│ └── ViewTest.java
├── private-class-data/
│ ├── README.md
│ ├── etc/
│ │ ├── private-class-data.ucls
│ │ └── private-class-data.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── privateclassdata/
│ │ ├── App.java
│ │ ├── ImmutableStew.java
│ │ ├── Stew.java
│ │ └── StewData.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── privateclassdata/
│ ├── AppTest.java
│ ├── ImmutableStewTest.java
│ ├── StewTest.java
│ └── utils/
│ └── InMemoryAppender.java
├── producer-consumer/
│ ├── README.md
│ ├── etc/
│ │ ├── producer-consumer.ucls
│ │ └── producer-consumer.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── producer/
│ │ └── consumer/
│ │ ├── App.java
│ │ ├── Consumer.java
│ │ ├── Item.java
│ │ ├── ItemQueue.java
│ │ └── Producer.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── producer/
│ └── consumer/
│ ├── AppTest.java
│ ├── ConsumerTest.java
│ └── ProducerTest.java
├── promise/
│ ├── README.md
│ ├── etc/
│ │ ├── promise.ucls
│ │ └── promise.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── promise/
│ │ ├── App.java
│ │ ├── Promise.java
│ │ ├── PromiseSupport.java
│ │ └── Utility.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── promise/
│ ├── AppTest.java
│ └── PromiseTest.java
├── property/
│ ├── README.md
│ ├── etc/
│ │ ├── property.ucls
│ │ └── property.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── property/
│ │ ├── App.java
│ │ ├── Character.java
│ │ ├── Prototype.java
│ │ └── Stats.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── property/
│ ├── AppTest.java
│ └── CharacterTest.java
├── prototype/
│ ├── README.md
│ ├── etc/
│ │ └── prototype.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── prototype/
│ │ ├── App.java
│ │ ├── Beast.java
│ │ ├── ElfBeast.java
│ │ ├── ElfMage.java
│ │ ├── ElfWarlord.java
│ │ ├── HeroFactory.java
│ │ ├── HeroFactoryImpl.java
│ │ ├── Mage.java
│ │ ├── OrcBeast.java
│ │ ├── OrcMage.java
│ │ ├── OrcWarlord.java
│ │ ├── Prototype.java
│ │ └── Warlord.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── prototype/
│ ├── AppTest.java
│ └── PrototypeTest.java
├── proxy/
│ ├── README.md
│ ├── etc/
│ │ └── proxy.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── proxy/
│ │ ├── App.java
│ │ ├── IvoryTower.java
│ │ ├── Wizard.java
│ │ ├── WizardTower.java
│ │ └── WizardTowerProxy.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── proxy/
│ ├── AppTest.java
│ ├── IvoryTowerTest.java
│ ├── WizardTest.java
│ ├── WizardTowerProxyTest.java
│ └── utils/
│ └── InMemoryAppender.java
├── publish-subscribe/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── publish/
│ │ └── subscribe/
│ │ ├── App.java
│ │ ├── model/
│ │ │ ├── Message.java
│ │ │ └── Topic.java
│ │ ├── publisher/
│ │ │ ├── Publisher.java
│ │ │ └── PublisherImpl.java
│ │ └── subscriber/
│ │ ├── CustomerSupportSubscriber.java
│ │ ├── DelayedWeatherSubscriber.java
│ │ ├── Subscriber.java
│ │ └── WeatherSubscriber.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── publish/
│ └── subscribe/
│ ├── AppTest.java
│ ├── LoggerExtension.java
│ ├── model/
│ │ ├── MessageTest.java
│ │ └── TopicTest.java
│ ├── publisher/
│ │ └── PublisherTest.java
│ └── subscriber/
│ └── SubscriberTest.java
├── queue-based-load-leveling/
│ ├── README.md
│ ├── etc/
│ │ ├── queue-based-load-leveling.urm.puml
│ │ ├── queue-load-leveling.ucls
│ │ └── queue-load-leveling.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── queue/
│ │ └── load/
│ │ └── leveling/
│ │ ├── App.java
│ │ ├── Message.java
│ │ ├── MessageQueue.java
│ │ ├── ServiceExecutor.java
│ │ ├── Task.java
│ │ └── TaskGenerator.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── queue/
│ └── load/
│ └── leveling/
│ ├── AppTest.java
│ ├── MessageQueueTest.java
│ ├── MessageTest.java
│ └── TaskGenSrvExeTest.java
├── rate-limiting-pattern/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── rate/
│ │ └── limiting/
│ │ └── pattern/
│ │ ├── AdaptiveRateLimiter.java
│ │ ├── App.java
│ │ ├── FindCustomerRequest.java
│ │ ├── FixedWindowRateLimiter.java
│ │ ├── RateLimitException.java
│ │ ├── RateLimitOperation.java
│ │ ├── RateLimiter.java
│ │ ├── ServiceUnavailableException.java
│ │ ├── ThrottlingException.java
│ │ └── TokenBucketRateLimiter.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── rate/
│ └── limiting/
│ └── pattern/
│ ├── AdaptiveRateLimiterTest.java
│ ├── AppTest.java
│ ├── AppTestUtils.java
│ ├── ConcurrencyTests.java
│ ├── ExceptionTests.java
│ ├── FindCustomerRequestTest.java
│ ├── FixedWindowRateLimiterTest.java
│ ├── RateLimitOperationTest.java
│ ├── RateLimiterTest.java
│ └── TokenBucketRateLimiterTest.java
├── reactor/
│ ├── README.md
│ ├── etc/
│ │ ├── reactor.ucls
│ │ └── reactor.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── reactor/
│ │ ├── app/
│ │ │ ├── App.java
│ │ │ ├── AppClient.java
│ │ │ └── LoggingHandler.java
│ │ └── framework/
│ │ ├── AbstractNioChannel.java
│ │ ├── ChannelHandler.java
│ │ ├── Dispatcher.java
│ │ ├── NioDatagramChannel.java
│ │ ├── NioReactor.java
│ │ ├── NioServerSocketChannel.java
│ │ ├── SameThreadDispatcher.java
│ │ └── ThreadPoolDispatcher.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── reactor/
│ └── app/
│ └── ReactorTest.java
├── registry/
│ ├── README.md
│ ├── etc/
│ │ └── registry.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── registry/
│ │ ├── App.java
│ │ ├── Customer.java
│ │ └── CustomerRegistry.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── registry/
│ └── CustomerRegistryTest.java
├── repository/
│ ├── README.md
│ ├── etc/
│ │ ├── repository.ucls
│ │ └── repository.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── repository/
│ │ │ ├── App.java
│ │ │ ├── AppConfig.java
│ │ │ ├── Person.java
│ │ │ ├── PersonRepository.java
│ │ │ └── PersonSpecifications.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── persistence.xml
│ │ ├── applicationContext.xml
│ │ └── logback.xml
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── repository/
│ ├── AnnotationBasedRepositoryTest.java
│ ├── AppConfigTest.java
│ ├── AppTest.java
│ └── RepositoryTest.java
├── resource-acquisition-is-initialization/
│ ├── README.md
│ ├── etc/
│ │ ├── resource-acquisition-is-initialization.ucls
│ │ └── resource-acquisition-is-initialization.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── resource/
│ │ └── acquisition/
│ │ └── is/
│ │ └── initialization/
│ │ ├── App.java
│ │ ├── SlidingDoor.java
│ │ └── TreasureChest.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── resource/
│ └── acquisition/
│ └── is/
│ └── initialization/
│ ├── AppTest.java
│ └── ClosableTest.java
├── retry/
│ ├── README.md
│ ├── etc/
│ │ └── retry.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── retry/
│ │ ├── App.java
│ │ ├── BusinessException.java
│ │ ├── BusinessOperation.java
│ │ ├── CustomerNotFoundException.java
│ │ ├── DatabaseNotAvailableException.java
│ │ ├── FindCustomer.java
│ │ ├── Retry.java
│ │ └── RetryExponentialBackoff.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── retry/
│ ├── FindCustomerTest.java
│ ├── RetryExponentialBackoffTest.java
│ └── RetryTest.java
├── role-object/
│ ├── README.md
│ ├── etc/
│ │ └── role-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── roleobject/
│ │ ├── ApplicationRoleObject.java
│ │ ├── BorrowerRole.java
│ │ ├── Customer.java
│ │ ├── CustomerCore.java
│ │ ├── CustomerRole.java
│ │ ├── InvestorRole.java
│ │ └── Role.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── roleobject/
│ ├── ApplicationRoleObjectTest.java
│ ├── BorrowerRoleTest.java
│ ├── CustomerCoreTest.java
│ ├── InvestorRoleTest.java
│ └── RoleTest.java
├── saga/
│ ├── README.md
│ ├── etc/
│ │ └── saga.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── saga/
│ │ ├── choreography/
│ │ │ ├── ChoreographyChapter.java
│ │ │ ├── FlyBookingService.java
│ │ │ ├── HotelBookingService.java
│ │ │ ├── OrderService.java
│ │ │ ├── Saga.java
│ │ │ ├── SagaApplication.java
│ │ │ ├── Service.java
│ │ │ ├── ServiceDiscoveryService.java
│ │ │ └── WithdrawMoneyService.java
│ │ └── orchestration/
│ │ ├── ChapterResult.java
│ │ ├── FlyBookingService.java
│ │ ├── HotelBookingService.java
│ │ ├── OrchestrationChapter.java
│ │ ├── OrderService.java
│ │ ├── Saga.java
│ │ ├── SagaApplication.java
│ │ ├── SagaOrchestrator.java
│ │ ├── Service.java
│ │ ├── ServiceDiscoveryService.java
│ │ └── WithdrawMoneyService.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── saga/
│ ├── choreography/
│ │ ├── SagaApplicationTest.java
│ │ └── SagaChoreographyTest.java
│ └── orchestration/
│ ├── SagaApplicationTest.java
│ ├── SagaOrchestratorInternallyTest.java
│ └── SagaOrchestratorTest.java
├── separated-interface/
│ ├── README.md
│ ├── etc/
│ │ └── separated-interface.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── separatedinterface/
│ │ ├── App.java
│ │ ├── invoice/
│ │ │ ├── InvoiceGenerator.java
│ │ │ └── TaxCalculator.java
│ │ └── taxes/
│ │ ├── DomesticTaxCalculator.java
│ │ └── ForeignTaxCalculator.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── separatedinterface/
│ ├── AppTest.java
│ ├── invoice/
│ │ └── InvoiceGeneratorTest.java
│ └── taxes/
│ ├── DomesticTaxCalculatorTest.java
│ └── ForeignTaxCalculatorTest.java
├── serialized-entity/
│ ├── README.md
│ ├── etc/
│ │ ├── serialize-entity.urm.puml
│ │ └── serialized-entity.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── serializedentity/
│ │ ├── App.java
│ │ ├── Country.java
│ │ ├── CountryDao.java
│ │ └── CountrySchemaSql.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── serializedentity/
│ ├── AppTest.java
│ └── CountryTest.java
├── serialized-lob/
│ ├── README.md
│ ├── etc/
│ │ ├── serialized-lob.urm.puml
│ │ ├── slob.urm.puml
│ │ └── slob.urm.uml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── slob/
│ │ ├── App.java
│ │ ├── dbservice/
│ │ │ └── DatabaseService.java
│ │ ├── lob/
│ │ │ ├── Animal.java
│ │ │ ├── Forest.java
│ │ │ └── Plant.java
│ │ └── serializers/
│ │ ├── BlobSerializer.java
│ │ ├── ClobSerializer.java
│ │ └── LobSerializer.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── slob/
│ └── AppTest.java
├── servant/
│ ├── README.md
│ ├── etc/
│ │ ├── servant-pattern.ucls
│ │ └── servant.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── etc/
│ │ └── servant.xml
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── servant/
│ │ ├── App.java
│ │ ├── King.java
│ │ ├── Queen.java
│ │ ├── Royalty.java
│ │ └── Servant.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── servant/
│ ├── AppTest.java
│ ├── KingTest.java
│ ├── QueenTest.java
│ └── ServantTest.java
├── server-session/
│ ├── README.md
│ ├── etc/
│ │ └── server-session.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── sessionserver/
│ │ ├── App.java
│ │ ├── LoginHandler.java
│ │ └── LogoutHandler.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── sessionserver/
│ ├── LoginHandlerTest.java
│ └── LogoutHandlerTest.java
├── service-layer/
│ ├── README.md
│ ├── etc/
│ │ ├── service-layer.ucls
│ │ └── service-layer.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── servicelayer/
│ │ │ ├── app/
│ │ │ │ └── App.java
│ │ │ ├── common/
│ │ │ │ ├── BaseEntity.java
│ │ │ │ ├── Dao.java
│ │ │ │ └── DaoBaseImpl.java
│ │ │ ├── hibernate/
│ │ │ │ └── HibernateUtil.java
│ │ │ ├── magic/
│ │ │ │ ├── MagicService.java
│ │ │ │ └── MagicServiceImpl.java
│ │ │ ├── spell/
│ │ │ │ ├── Spell.java
│ │ │ │ ├── SpellDao.java
│ │ │ │ └── SpellDaoImpl.java
│ │ │ ├── spellbook/
│ │ │ │ ├── Spellbook.java
│ │ │ │ ├── SpellbookDao.java
│ │ │ │ └── SpellbookDaoImpl.java
│ │ │ └── wizard/
│ │ │ ├── Wizard.java
│ │ │ ├── WizardDao.java
│ │ │ └── WizardDaoImpl.java
│ │ └── resources/
│ │ └── logback.xml
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── servicelayer/
│ ├── app/
│ │ └── AppTest.java
│ ├── common/
│ │ └── BaseDaoTest.java
│ ├── magic/
│ │ └── MagicServiceImplTest.java
│ ├── spell/
│ │ └── SpellDaoImplTest.java
│ ├── spellbook/
│ │ └── SpellbookDaoImplTest.java
│ └── wizard/
│ └── WizardDaoImplTest.java
├── service-locator/
│ ├── README.md
│ ├── etc/
│ │ ├── service-locator.ucls
│ │ └── service-locator.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── servicelocator/
│ │ ├── App.java
│ │ ├── InitContext.java
│ │ ├── Service.java
│ │ ├── ServiceCache.java
│ │ ├── ServiceImpl.java
│ │ └── ServiceLocator.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── servicelocator/
│ ├── AppTest.java
│ └── ServiceLocatorTest.java
├── service-stub/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── servicestub/
│ │ ├── App.java
│ │ ├── RealSentimentAnalysisServer.java
│ │ ├── SentimentAnalysisServer.java
│ │ └── StubSentimentAnalysisServer.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── servicestub/
│ ├── AppTest.java
│ ├── RealSentimentAnalysisServerTest.java
│ └── StubSentimentAnalysisServerTest.java
├── service-to-worker/
│ ├── README.md
│ ├── etc/
│ │ ├── service-to-worker.puml
│ │ └── service-to-worker.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── servicetoworker/
│ │ ├── Action.java
│ │ ├── App.java
│ │ ├── Command.java
│ │ ├── Dispatcher.java
│ │ ├── GiantController.java
│ │ ├── GiantModel.java
│ │ └── GiantView.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── servicetoworker/
│ ├── ActionTest.java
│ ├── AppTest.java
│ ├── DispatcherTest.java
│ ├── GiantControllerTest.java
│ ├── GiantModelTest.java
│ └── GiantViewTest.java
├── session-facade/
│ ├── README.md
│ ├── etc/
│ │ └── session-facade.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── sessionfacade/
│ │ ├── App.java
│ │ ├── CartService.java
│ │ ├── OrderService.java
│ │ ├── PaymentService.java
│ │ ├── Product.java
│ │ ├── ProductCatalogService.java
│ │ └── ShoppingFacade.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── sessionfacade/
│ ├── AppTest.java
│ ├── CartServiceTest.java
│ ├── PaymentServiceTest.java
│ ├── ProductTest.java
│ └── ShoppingFacadeTest.java
├── sharding/
│ ├── README.md
│ ├── etc/
│ │ └── sharding.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── sharding/
│ │ ├── App.java
│ │ ├── Data.java
│ │ ├── HashShardManager.java
│ │ ├── LookupShardManager.java
│ │ ├── RangeShardManager.java
│ │ ├── Shard.java
│ │ └── ShardManager.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── sharding/
│ ├── AppTest.java
│ ├── HashShardManagerTest.java
│ ├── LookupShardManagerTest.java
│ ├── RangeShardManagerTest.java
│ ├── ShardManagerTest.java
│ └── ShardTest.java
├── single-table-inheritance/
│ ├── README.md
│ ├── etc/
│ │ └── single-table-inheritance.urm.puml
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ ├── SingleTableInheritance.java
│ │ ├── entity/
│ │ │ ├── Car.java
│ │ │ ├── Freighter.java
│ │ │ ├── PassengerVehicle.java
│ │ │ ├── Train.java
│ │ │ ├── TransportVehicle.java
│ │ │ ├── Truck.java
│ │ │ └── Vehicle.java
│ │ ├── repository/
│ │ │ └── VehicleRepository.java
│ │ └── service/
│ │ └── VehicleService.java
│ └── resources/
│ └── application.properties
├── singleton/
│ ├── README.md
│ ├── etc/
│ │ └── singleton.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── singleton/
│ │ ├── App.java
│ │ ├── BillPughImplementation.java
│ │ ├── EnumIvoryTower.java
│ │ ├── InitializingOnDemandHolderIdiom.java
│ │ ├── IvoryTower.java
│ │ ├── ThreadSafeDoubleCheckLocking.java
│ │ ├── ThreadSafeLazyLoadedIvoryTower.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── singleton/
│ ├── AppTest.java
│ ├── BillPughImplementationTest.java
│ ├── EnumIvoryTowerTest.java
│ ├── InitializingOnDemandHolderIdiomTest.java
│ ├── IvoryTowerTest.java
│ ├── SingletonTest.java
│ ├── ThreadSafeDoubleCheckLockingTest.java
│ └── ThreadSafeLazyLoadedIvoryTowerTest.java
├── spatial-partition/
│ ├── README.md
│ ├── etc/
│ │ └── spatial-partition.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── spatialpartition/
│ │ ├── App.java
│ │ ├── Bubble.java
│ │ ├── Point.java
│ │ ├── QuadTree.java
│ │ ├── Rect.java
│ │ ├── SpatialPartitionBubbles.java
│ │ └── SpatialPartitionGeneric.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── spatialpartition/
│ ├── BubbleTest.java
│ ├── QuadTreeTest.java
│ ├── RectTest.java
│ └── SpatialPartitionBubblesTest.java
├── special-case/
│ ├── README.md
│ ├── etc/
│ │ └── special-case.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── specialcase/
│ │ ├── App.java
│ │ ├── ApplicationServices.java
│ │ ├── ApplicationServicesImpl.java
│ │ ├── Db.java
│ │ ├── DomainServices.java
│ │ ├── DomainServicesImpl.java
│ │ ├── DownForMaintenance.java
│ │ ├── InsufficientFunds.java
│ │ ├── InvalidUser.java
│ │ ├── MaintenanceLock.java
│ │ ├── MoneyTransaction.java
│ │ ├── OutOfStock.java
│ │ ├── ReceiptDto.java
│ │ └── ReceiptViewModel.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── specialcase/
│ ├── AppTest.java
│ └── SpecialCasesTest.java
├── specification/
│ ├── README.md
│ ├── etc/
│ │ ├── specification.ucls
│ │ └── specification.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── specification/
│ │ ├── app/
│ │ │ └── App.java
│ │ ├── creature/
│ │ │ ├── AbstractCreature.java
│ │ │ ├── Creature.java
│ │ │ ├── Dragon.java
│ │ │ ├── Goblin.java
│ │ │ ├── KillerBee.java
│ │ │ ├── Octopus.java
│ │ │ ├── Shark.java
│ │ │ └── Troll.java
│ │ ├── property/
│ │ │ ├── Color.java
│ │ │ ├── Mass.java
│ │ │ ├── Movement.java
│ │ │ └── Size.java
│ │ └── selector/
│ │ ├── AbstractSelector.java
│ │ ├── ColorSelector.java
│ │ ├── ConjunctionSelector.java
│ │ ├── DisjunctionSelector.java
│ │ ├── MassEqualSelector.java
│ │ ├── MassGreaterThanSelector.java
│ │ ├── MassSmallerThanOrEqSelector.java
│ │ ├── MovementSelector.java
│ │ ├── NegationSelector.java
│ │ └── SizeSelector.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── specification/
│ ├── app/
│ │ └── AppTest.java
│ ├── creature/
│ │ └── CreatureTest.java
│ └── selector/
│ ├── ColorSelectorTest.java
│ ├── CompositeSelectorsTest.java
│ ├── MassSelectorTest.java
│ ├── MovementSelectorTest.java
│ └── SizeSelectorTest.java
├── state/
│ ├── README.md
│ ├── etc/
│ │ └── state.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── state/
│ │ ├── AngryState.java
│ │ ├── App.java
│ │ ├── Mammoth.java
│ │ ├── PeacefulState.java
│ │ └── State.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── state/
│ ├── AppTest.java
│ └── MammothTest.java
├── step-builder/
│ ├── README.md
│ ├── etc/
│ │ ├── step-builder.ucls
│ │ └── step-builder.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── stepbuilder/
│ │ ├── App.java
│ │ ├── Character.java
│ │ └── CharacterStepBuilder.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── stepbuilder/
│ ├── AppTest.java
│ └── CharacterStepBuilderTest.java
├── strangler/
│ ├── README.md
│ ├── etc/
│ │ ├── strangler.puml
│ │ └── strangler.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── strangler/
│ │ ├── App.java
│ │ ├── HalfArithmetic.java
│ │ ├── HalfSource.java
│ │ ├── NewArithmetic.java
│ │ ├── NewSource.java
│ │ ├── OldArithmetic.java
│ │ └── OldSource.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── strangler/
│ ├── AppTest.java
│ ├── HalfArithmeticTest.java
│ ├── HalfSourceTest.java
│ ├── NewArithmeticTest.java
│ ├── NewSourceTest.java
│ ├── OldArithmeticTest.java
│ └── OldSourceTest.java
├── strategy/
│ ├── README.md
│ ├── etc/
│ │ └── strategy.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── strategy/
│ │ ├── App.java
│ │ ├── DragonSlayer.java
│ │ ├── DragonSlayingStrategy.java
│ │ ├── LambdaStrategy.java
│ │ ├── MeleeStrategy.java
│ │ ├── ProjectileStrategy.java
│ │ └── SpellStrategy.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── strategy/
│ ├── AppTest.java
│ ├── DragonSlayerTest.java
│ └── DragonSlayingStrategyTest.java
├── subclass-sandbox/
│ ├── README.md
│ ├── etc/
│ │ └── subclass-sandbox.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── subclasssandbox/
│ │ ├── App.java
│ │ ├── GroundDive.java
│ │ ├── SkyLaunch.java
│ │ └── Superpower.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── subclasssandbox/
│ ├── AppTest.java
│ ├── GroundDiveTest.java
│ └── SkyLaunchTest.java
├── table-inheritance/
│ ├── README.md
│ ├── etc/
│ │ └── table-inheritance.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── table/
│ │ └── inheritance/
│ │ ├── App.java
│ │ ├── Car.java
│ │ ├── Truck.java
│ │ ├── Vehicle.java
│ │ └── VehicleDatabase.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── table/
│ └── inheritance/
│ ├── AppTest.java
│ └── VehicleDatabaseTest.java
├── table-module/
│ ├── README.md
│ ├── etc/
│ │ └── table-module.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── tablemodule/
│ │ ├── App.java
│ │ ├── User.java
│ │ └── UserTableModule.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── tablemodule/
│ ├── AppTest.java
│ ├── UserTableModuleTest.java
│ └── UserTest.java
├── template-method/
│ ├── README.md
│ ├── etc/
│ │ └── template-method.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── templatemethod/
│ │ ├── App.java
│ │ ├── HalflingThief.java
│ │ ├── HitAndRunMethod.java
│ │ ├── StealingMethod.java
│ │ └── SubtleMethod.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── templatemethod/
│ ├── AppTest.java
│ ├── HalflingThiefTest.java
│ ├── HitAndRunMethodTest.java
│ ├── StealingMethodTest.java
│ └── SubtleMethodTest.java
├── templateview/
│ ├── README.md
│ ├── etc/
│ │ ├── template-view.urm.puml
│ │ └── templateview.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── templateview/
│ │ ├── App.java
│ │ ├── ContactPageView.java
│ │ ├── HomePageView.java
│ │ └── TemplateView.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── templateview/
│ ├── AppTest.java
│ ├── ContactPageViewTest.java
│ ├── HomePageViewTest.java
│ └── TemplateViewTest.java
├── thread-pool-executor/
│ ├── README.md
│ ├── etc/
│ │ └── thread-pool-executor.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── threadpoolexecutor/
│ │ ├── App.java
│ │ ├── FrontDeskService.java
│ │ ├── GuestCheckInTask.java
│ │ └── VipGuestCheckInTask.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── threadpoolexecutor/
│ ├── AppTest.java
│ ├── FrontDeskServiceTest.java
│ ├── GuestCheckInTaskTest.java
│ └── VipGuestCheckInTaskTest.java
├── throttling/
│ ├── README.md
│ ├── etc/
│ │ └── throttling.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── throttling/
│ │ ├── App.java
│ │ ├── BarCustomer.java
│ │ ├── Bartender.java
│ │ ├── CallsCount.java
│ │ └── timer/
│ │ ├── ThrottleTimerImpl.java
│ │ └── Throttler.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── throttling/
│ ├── AppTest.java
│ ├── BarCustomerTest.java
│ └── BartenderTest.java
├── tolerant-reader/
│ ├── README.md
│ ├── etc/
│ │ └── tolerant-reader.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── tolerantreader/
│ │ ├── App.java
│ │ ├── RainbowFish.java
│ │ ├── RainbowFishSerializer.java
│ │ └── RainbowFishV2.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── tolerantreader/
│ ├── AppTest.java
│ ├── RainbowFishSerializerTest.java
│ ├── RainbowFishTest.java
│ └── RainbowFishV2Test.java
├── trampoline/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ └── trampoline.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── trampoline/
│ │ ├── Trampoline.java
│ │ └── TrampolineApp.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── trampoline/
│ └── TrampolineAppTest.java
├── transaction-script/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ └── transaction-script.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── transactionscript/
│ │ ├── App.java
│ │ ├── Hotel.java
│ │ ├── HotelDao.java
│ │ ├── HotelDaoImpl.java
│ │ ├── Room.java
│ │ └── RoomSchemaSql.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── transactionscript/
│ ├── AppTest.java
│ ├── HotelDaoImplTest.java
│ ├── HotelTest.java
│ └── RoomTest.java
├── twin/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ ├── twin.ucls
│ │ └── twin.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── twin/
│ │ ├── App.java
│ │ ├── BallItem.java
│ │ ├── BallThread.java
│ │ └── GameItem.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── twin/
│ ├── AppTest.java
│ ├── BallItemTest.java
│ └── BallThreadTest.java
├── type-object/
│ ├── README.md
│ ├── etc/
│ │ ├── type-object.urm.puml
│ │ └── typeobjectpattern.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── iluwatar/
│ │ │ └── typeobject/
│ │ │ ├── App.java
│ │ │ ├── Candy.java
│ │ │ ├── CandyGame.java
│ │ │ ├── Cell.java
│ │ │ ├── CellPool.java
│ │ │ └── JsonParser.java
│ │ └── resources/
│ │ └── candy.json
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── typeobject/
│ ├── CandyGameTest.java
│ ├── CellPoolTest.java
│ └── CellTest.java
├── unit-of-work/
│ ├── README.md
│ ├── etc/
│ │ ├── unit-of-work.ucls
│ │ └── unit-of-work.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── unitofwork/
│ │ ├── App.java
│ │ ├── ArmsDealer.java
│ │ ├── UnitActions.java
│ │ ├── UnitOfWork.java
│ │ ├── Weapon.java
│ │ └── WeaponDatabase.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── unitofwork/
│ ├── AppTest.java
│ └── ArmsDealerTest.java
├── update-method/
│ ├── README.md
│ ├── etc/
│ │ └── update-method.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── updatemethod/
│ │ ├── App.java
│ │ ├── Entity.java
│ │ ├── Skeleton.java
│ │ ├── Statue.java
│ │ └── World.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── updatemethod/
│ ├── AppTest.java
│ ├── SkeletonTest.java
│ ├── StatueTest.java
│ └── WorldTest.java
├── value-object/
│ ├── README.md
│ ├── etc/
│ │ ├── value-object.ucls
│ │ └── value-object.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── value/
│ │ └── object/
│ │ ├── App.java
│ │ └── HeroStat.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── value/
│ └── object/
│ ├── AppTest.java
│ └── HeroStatTest.java
├── version-number/
│ ├── README.md
│ ├── etc/
│ │ └── version-number.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── versionnumber/
│ │ ├── App.java
│ │ ├── Book.java
│ │ ├── BookDuplicateException.java
│ │ ├── BookNotFoundException.java
│ │ ├── BookRepository.java
│ │ └── VersionMismatchException.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── versionnumber/
│ ├── AppTest.java
│ └── BookRepositoryTest.java
├── view-helper/
│ ├── README.md
│ ├── etc/
│ │ ├── view-helper-sequence-diagram.puml
│ │ └── view-helper.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── viewhelper/
│ │ ├── App.java
│ │ ├── ConsoleProductView.java
│ │ ├── Product.java
│ │ ├── ProductController.java
│ │ ├── ProductViewHelper.java
│ │ ├── ProductViewModel.java
│ │ ├── View.java
│ │ └── ViewHelper.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── viewhelper/
│ ├── AppTest.java
│ └── ProductViewHelperTest.java
├── virtual-proxy/
│ ├── .gitignore
│ ├── README.md
│ ├── etc/
│ │ ├── virtual-proxy.urm.puml
│ │ └── virtual.proxy.urm.puml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── iluwatar/
│ │ └── virtual/
│ │ └── proxy/
│ │ ├── App.java
│ │ ├── ExpensiveObject.java
│ │ ├── RealVideoObject.java
│ │ └── VideoObjectProxy.java
│ └── test/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── virtual/
│ └── proxy/
│ ├── AppTest.java
│ ├── RealVideoObjectTest.java
│ └── VideoObjectProxyTest.java
└── visitor/
├── README.md
├── etc/
│ ├── visitor.ucls
│ └── visitor.urm.puml
├── pom.xml
└── src/
├── main/
│ └── java/
│ └── com/
│ └── iluwatar/
│ └── visitor/
│ ├── App.java
│ ├── Commander.java
│ ├── CommanderVisitor.java
│ ├── Sergeant.java
│ ├── SergeantVisitor.java
│ ├── Soldier.java
│ ├── SoldierVisitor.java
│ ├── Unit.java
│ └── UnitVisitor.java
└── test/
└── java/
└── com/
└── iluwatar/
└── visitor/
├── AppTest.java
├── CommanderTest.java
├── CommanderVisitorTest.java
├── SergeantTest.java
├── SergeantVisitorTest.java
├── SoldierTest.java
├── SoldierVisitorTest.java
├── UnitTest.java
└── VisitorTest.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .all-contributorsrc
================================================
{
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"contributors": [
{
"login": "iluwatar",
"name": "Ilkka Seppälä",
"avatar_url": "https://avatars1.githubusercontent.com/u/582346?v=4",
"profile": "https://github.com/iluwatar",
"contributions": [
"projectManagement",
"maintenance",
"content"
]
},
{
"login": "ohbus",
"name": "Subhrodip Mohanta",
"avatar_url": "https://avatars0.githubusercontent.com/u/13291222?v=4",
"profile": "http://subho.xyz",
"contributions": [
"code",
"review",
"maintenance"
]
},
{
"login": "amit1307",
"name": "amit1307",
"avatar_url": "https://avatars0.githubusercontent.com/u/23420222?v=4",
"profile": "https://github.com/amit1307",
"contributions": [
"code"
]
},
{
"login": "npathai",
"name": "Narendra Pathai",
"avatar_url": "https://avatars2.githubusercontent.com/u/1792515?v=4",
"profile": "https://github.com/npathai",
"contributions": [
"code",
"ideas",
"review"
]
},
{
"login": "fluxw42",
"name": "Jeroen Meulemeester",
"avatar_url": "https://avatars1.githubusercontent.com/u/1545460?v=4",
"profile": "https://github.com/fluxw42",
"contributions": [
"code"
]
},
{
"login": "mikulucky",
"name": "Joseph McCarthy",
"avatar_url": "https://avatars0.githubusercontent.com/u/4526195?v=4",
"profile": "http://www.joemccarthy.co.uk",
"contributions": [
"code"
]
},
{
"login": "thomasoss",
"name": "Thomas",
"avatar_url": "https://avatars1.githubusercontent.com/u/22516154?v=4",
"profile": "https://github.com/thomasoss",
"contributions": [
"code"
]
},
{
"login": "anuragagarwal561994",
"name": "Anurag Agarwal",
"avatar_url": "https://avatars1.githubusercontent.com/u/6075379?v=4",
"profile": "https://github.com/anuragagarwal561994",
"contributions": [
"code"
]
},
{
"login": "markusmo3",
"name": "Markus Moser",
"avatar_url": "https://avatars1.githubusercontent.com/u/3317416?v=4",
"profile": "https://markusmo3.github.io",
"contributions": [
"design",
"code",
"ideas"
]
},
{
"login": "isabiq",
"name": "Sabiq Ihab",
"avatar_url": "https://avatars1.githubusercontent.com/u/19510920?v=4",
"profile": "https://twitter.com/i_sabiq",
"contributions": [
"code"
]
},
{
"login": "inbravo",
"name": "Amit Dixit",
"avatar_url": "https://avatars3.githubusercontent.com/u/5253764?v=4",
"profile": "http://inbravo.github.io",
"contributions": [
"code"
]
},
{
"login": "piyushchaudhari04",
"name": "Piyush Kailash Chaudhari",
"avatar_url": "https://avatars3.githubusercontent.com/u/10268029?v=4",
"profile": "https://github.com/piyushchaudhari04",
"contributions": [
"code"
]
},
{
"login": "joshzambales",
"name": "joshzambales",
"avatar_url": "https://avatars1.githubusercontent.com/u/8704552?v=4",
"profile": "https://github.com/joshzambales",
"contributions": [
"code"
]
},
{
"login": "Crossy147",
"name": "Kamil Pietruszka",
"avatar_url": "https://avatars2.githubusercontent.com/u/7272996?v=4",
"profile": "https://github.com/Crossy147",
"contributions": [
"code"
]
},
{
"login": "zafarella",
"name": "Zafar Khaydarov",
"avatar_url": "https://avatars2.githubusercontent.com/u/660742?v=4",
"profile": "http://cs.joensuu.fi/~zkhayda",
"contributions": [
"code",
"doc"
]
},
{
"login": "kemitix",
"name": "Paul Campbell",
"avatar_url": "https://avatars1.githubusercontent.com/u/1147749?v=4",
"profile": "https://kemitix.github.io/",
"contributions": [
"code"
]
},
{
"login": "Argyro-Sioziou",
"name": "Argyro Sioziou",
"avatar_url": "https://avatars0.githubusercontent.com/u/22822639?v=4",
"profile": "https://github.com/Argyro-Sioziou",
"contributions": [
"code"
]
},
{
"login": "TylerMcConville",
"name": "TylerMcConville",
"avatar_url": "https://avatars0.githubusercontent.com/u/4946449?v=4",
"profile": "https://github.com/TylerMcConville",
"contributions": [
"code"
]
},
{
"login": "saksham93",
"name": "saksham93",
"avatar_url": "https://avatars1.githubusercontent.com/u/37399540?v=4",
"profile": "https://github.com/saksham93",
"contributions": [
"code"
]
},
{
"login": "nikhilbarar",
"name": "nikhilbarar",
"avatar_url": "https://avatars2.githubusercontent.com/u/37332144?v=4",
"profile": "https://github.com/nikhilbarar",
"contributions": [
"code"
]
},
{
"login": "colinbut",
"name": "Colin But",
"avatar_url": "https://avatars2.githubusercontent.com/u/10725674?v=4",
"profile": "http://colinbut.com",
"contributions": [
"code"
]
},
{
"login": "ruslanpa",
"name": "Ruslan",
"avatar_url": "https://avatars2.githubusercontent.com/u/1503411?v=4",
"profile": "https://github.com/ruslanpa",
"contributions": [
"code"
]
},
{
"login": "JuhoKang",
"name": "Juho Kang",
"avatar_url": "https://avatars1.githubusercontent.com/u/4745294?v=4",
"profile": "https://github.com/JuhoKang",
"contributions": [
"code"
]
},
{
"login": "dheeraj-mummareddy",
"name": "Dheeraj Mummareddy",
"avatar_url": "https://avatars2.githubusercontent.com/u/7002230?v=4",
"profile": "https://github.com/dheeraj-mummareddy",
"contributions": [
"code"
]
},
{
"login": "bernardosulzbach",
"name": "Bernardo Sulzbach",
"avatar_url": "https://avatars0.githubusercontent.com/u/8271090?v=4",
"profile": "https://www.bernardosulzbach.com",
"contributions": [
"code"
]
},
{
"login": "4lexis",
"name": "Aleksandar Dudukovic",
"avatar_url": "https://avatars0.githubusercontent.com/u/19871727?v=4",
"profile": "https://github.com/4lexis",
"contributions": [
"code"
]
},
{
"login": "yusufaytas",
"name": "Yusuf Aytaş",
"avatar_url": "https://avatars2.githubusercontent.com/u/1049483?v=4",
"profile": "https://www.yusufaytas.com",
"contributions": [
"code"
]
},
{
"login": "qpi",
"name": "Mihály Kuprivecz",
"avatar_url": "https://avatars2.githubusercontent.com/u/1001491?v=4",
"profile": "http://futurehomes.hu",
"contributions": [
"code"
]
},
{
"login": "kapinuss",
"name": "Stanislav Kapinus",
"avatar_url": "https://avatars0.githubusercontent.com/u/17639945?v=4",
"profile": "https://github.com/kapinuss",
"contributions": [
"code"
]
},
{
"login": "gvsharma",
"name": "GVSharma",
"avatar_url": "https://avatars1.githubusercontent.com/u/6648152?v=4",
"profile": "https://github.com/gvsharma",
"contributions": [
"code"
]
},
{
"login": "SrdjanPaunovic",
"name": "Srđan Paunović",
"avatar_url": "https://avatars1.githubusercontent.com/u/22815104?v=4",
"profile": "https://github.com/SrdjanPaunovic",
"contributions": [
"code"
]
},
{
"login": "sideris",
"name": "Petros G. Sideris",
"avatar_url": "https://avatars3.githubusercontent.com/u/5484694?v=4",
"profile": "https://sideris.xyz/",
"contributions": [
"code"
]
},
{
"login": "IAmPramod",
"name": "Pramod Gupta",
"avatar_url": "https://avatars1.githubusercontent.com/u/2184241?v=4",
"profile": "https://www.linkedin.com/in/pramodgupta3/",
"contributions": [
"review"
]
},
{
"login": "Amarnath510",
"name": "Amarnath Chandana",
"avatar_url": "https://avatars0.githubusercontent.com/u/4599623?v=4",
"profile": "https://amarnath510.github.io/portfolio",
"contributions": [
"code"
]
},
{
"login": "Anurag870",
"name": "Anurag870",
"avatar_url": "https://avatars1.githubusercontent.com/u/6295975?v=4",
"profile": "https://github.com/Anurag870",
"contributions": [
"code",
"doc"
]
},
{
"login": "Deathnerd",
"name": "Wes Gilleland",
"avatar_url": "https://avatars0.githubusercontent.com/u/1685953?v=4",
"profile": "http://theerroris.me",
"contributions": [
"code"
]
},
{
"login": "Harshrajsinh",
"name": "Harshraj Thakor",
"avatar_url": "https://avatars2.githubusercontent.com/u/22811531?v=4",
"profile": "https://github.com/Harshrajsinh",
"contributions": [
"code"
]
},
{
"login": "MaVdbussche",
"name": "Martin Vandenbussche",
"avatar_url": "https://avatars1.githubusercontent.com/u/26136934?v=4",
"profile": "https://github.com/MaVdbussche",
"contributions": [
"code"
]
},
{
"login": "alexsomai",
"name": "Alexandru Somai",
"avatar_url": "https://avatars1.githubusercontent.com/u/5720977?v=4",
"profile": "https://alexsomai.com",
"contributions": [
"code"
]
},
{
"login": "amogozov",
"name": "Artur Mogozov",
"avatar_url": "https://avatars3.githubusercontent.com/u/7372215?v=4",
"profile": "https://github.com/amogozov",
"contributions": [
"code"
]
},
{
"login": "anthonycampbell",
"name": "anthony",
"avatar_url": "https://avatars3.githubusercontent.com/u/10249255?v=4",
"profile": "https://github.com/anthonycampbell",
"contributions": [
"code"
]
},
{
"login": "christophercolumbusdog",
"name": "Christian Cygnus",
"avatar_url": "https://avatars1.githubusercontent.com/u/9342724?v=4",
"profile": "http://ccygnus.com/",
"contributions": [
"code"
]
},
{
"login": "dzmitryh",
"name": "Dima Gubin",
"avatar_url": "https://avatars2.githubusercontent.com/u/5390492?v=4",
"profile": "https://about.me/dzmitryh",
"contributions": [
"code"
]
},
{
"login": "jjjimenez100",
"name": "Joshua Jimenez",
"avatar_url": "https://avatars3.githubusercontent.com/u/22243493?v=4",
"profile": "https://github.com/jjjimenez100",
"contributions": [
"code"
]
},
{
"login": "kaiwinter",
"name": "Kai Winter",
"avatar_url": "https://avatars0.githubusercontent.com/u/110982?v=4",
"profile": "http://about.me/kaiwinter",
"contributions": [
"code"
]
},
{
"login": "lbroman",
"name": "lbroman",
"avatar_url": "https://avatars1.githubusercontent.com/u/86007?v=4",
"profile": "https://github.com/lbroman",
"contributions": [
"code"
]
},
{
"login": "pnowy",
"name": "Przemek",
"avatar_url": "https://avatars1.githubusercontent.com/u/3254609?v=4",
"profile": "https://przemeknowak.com",
"contributions": [
"code"
]
},
{
"login": "prafful1",
"name": "Prafful Agarwal",
"avatar_url": "https://avatars0.githubusercontent.com/u/14350274?v=4",
"profile": "https://github.com/prafful1",
"contributions": [
"content"
]
},
{
"login": "sankypanhale",
"name": "Sanket Panhale",
"avatar_url": "https://avatars1.githubusercontent.com/u/6478783?v=4",
"profile": "https://github.com/sankypanhale",
"contributions": [
"content"
]
},
{
"login": "staillebois",
"name": "staillebois",
"avatar_url": "https://avatars0.githubusercontent.com/u/23701200?v=4",
"profile": "https://github.com/staillebois",
"contributions": [
"code"
]
},
{
"login": "valdar-hu",
"name": "Krisztián Nagy",
"avatar_url": "https://avatars3.githubusercontent.com/u/17962817?v=4",
"profile": "https://github.com/valdar-hu",
"contributions": [
"code"
]
},
{
"login": "vanogrid",
"name": "Alexander Ivanov",
"avatar_url": "https://avatars0.githubusercontent.com/u/4307918?v=4",
"profile": "https://www.vanogrid.com",
"contributions": [
"code"
]
},
{
"login": "yosfik",
"name": "Yosfik Alqadri",
"avatar_url": "https://avatars3.githubusercontent.com/u/4850270?v=4",
"profile": "https://github.com/yosfik",
"contributions": [
"code"
]
},
{
"login": "7agustibm",
"name": "Agustí Becerra Milà",
"avatar_url": "https://avatars0.githubusercontent.com/u/8149332?v=4",
"profile": "https://github.com/7agustibm",
"contributions": [
"code"
]
},
{
"login": "Juaanma",
"name": "Juan Manuel Suárez",
"avatar_url": "https://avatars3.githubusercontent.com/u/7390500?v=4",
"profile": "https://github.com/Juaanma",
"contributions": [
"code"
]
},
{
"login": "LuigiCortese",
"name": "Luigi Cortese",
"avatar_url": "https://avatars0.githubusercontent.com/u/9956006?v=4",
"profile": "http://www.devsedge.net/",
"contributions": [
"code"
]
},
{
"login": "Rzeposlaw",
"name": "Katarzyna Rzepecka",
"avatar_url": "https://avatars2.githubusercontent.com/u/18425745?v=4",
"profile": "https://github.com/Rzeposlaw",
"contributions": [
"code"
]
},
{
"login": "akrystian",
"name": "adamski.pro",
"avatar_url": "https://avatars1.githubusercontent.com/u/6537430?v=4",
"profile": "http://adamski.pro",
"contributions": [
"code"
]
},
{
"login": "baislsl",
"name": "Shengli Bai",
"avatar_url": "https://avatars0.githubusercontent.com/u/17060584?v=4",
"profile": "https://github.com/baislsl",
"contributions": [
"code"
]
},
{
"login": "besok",
"name": "Boris",
"avatar_url": "https://avatars2.githubusercontent.com/u/29834592?v=4",
"profile": "https://github.com/besok",
"contributions": [
"code"
]
},
{
"login": "dmitraver",
"name": "Dmitry Avershin",
"avatar_url": "https://avatars3.githubusercontent.com/u/1798156?v=4",
"profile": "https://github.com/dmitraver",
"contributions": [
"code"
]
},
{
"login": "fanofxiaofeng",
"name": "靳阳",
"avatar_url": "https://avatars0.githubusercontent.com/u/3983683?v=4",
"profile": "https://github.com/fanofxiaofeng",
"contributions": [
"code"
]
},
{
"login": "hoangnam2261",
"name": "hoangnam2261",
"avatar_url": "https://avatars2.githubusercontent.com/u/31692990?v=4",
"profile": "https://github.com/hoangnam2261",
"contributions": [
"code"
]
},
{
"login": "jarpit96",
"name": "Arpit Jain",
"avatar_url": "https://avatars2.githubusercontent.com/u/10098713?v=4",
"profile": "https://github.com/jarpit96",
"contributions": [
"code"
]
},
{
"login": "joningiwork",
"name": "Jón Ingi Sveinbjörnsson",
"avatar_url": "https://avatars2.githubusercontent.com/u/6115148?v=4",
"profile": "http://joningi.net",
"contributions": [
"code"
]
},
{
"login": "kirill-vlasov",
"name": "Kirill Vlasov",
"avatar_url": "https://avatars3.githubusercontent.com/u/16112495?v=4",
"profile": "https://github.com/kirill-vlasov",
"contributions": [
"code"
]
},
{
"login": "mitchellirvin",
"name": "Mitchell Irvin",
"avatar_url": "https://avatars0.githubusercontent.com/u/16233245?v=4",
"profile": "http://mitchell-irvin.com",
"contributions": [
"code"
]
},
{
"login": "ranjeet-floyd",
"name": "Ranjeet",
"avatar_url": "https://avatars0.githubusercontent.com/u/1992972?v=4",
"profile": "https://ranjeet-floyd.github.io",
"contributions": [
"code"
]
},
{
"login": "Alwayswithme",
"name": "PhoenixYip",
"avatar_url": "https://avatars3.githubusercontent.com/u/3234786?v=4",
"profile": "https://alwayswithme.github.io",
"contributions": [
"code"
]
},
{
"login": "MSaifAsif",
"name": "M Saif Asif",
"avatar_url": "https://avatars1.githubusercontent.com/u/6280554?v=4",
"profile": "https://github.com/MSaifAsif",
"contributions": [
"code"
]
},
{
"login": "kanwarpreet25",
"name": "kanwarpreet25",
"avatar_url": "https://avatars0.githubusercontent.com/u/39183641?v=4",
"profile": "https://github.com/kanwarpreet25",
"contributions": [
"code"
]
},
{
"login": "leonmak",
"name": "Leon Mak",
"avatar_url": "https://avatars3.githubusercontent.com/u/13071508?v=4",
"profile": "http://leonmak.me",
"contributions": [
"code"
]
},
{
"login": "perwramdemark",
"name": "Per Wramdemark",
"avatar_url": "https://avatars2.githubusercontent.com/u/7052193?v=4",
"profile": "http://www.wramdemark.se",
"contributions": [
"code"
]
},
{
"login": "waisuan",
"name": "Evan Sia Wai Suan",
"avatar_url": "https://avatars2.githubusercontent.com/u/10975700?v=4",
"profile": "https://github.com/waisuan",
"contributions": [
"code"
]
},
{
"login": "AnaghaSasikumar",
"name": "AnaghaSasikumar",
"avatar_url": "https://avatars2.githubusercontent.com/u/42939261?v=4",
"profile": "https://github.com/AnaghaSasikumar",
"contributions": [
"code"
]
},
{
"login": "christofferh",
"name": "Christoffer Hamberg",
"avatar_url": "https://avatars1.githubusercontent.com/u/767643?v=4",
"profile": "https://christofferh.com",
"contributions": [
"code"
]
},
{
"login": "dgruntz",
"name": "Dominik Gruntz",
"avatar_url": "https://avatars0.githubusercontent.com/u/1516800?v=4",
"profile": "https://github.com/dgruntz",
"contributions": [
"code"
]
},
{
"login": "hannespernpeintner",
"name": "Hannes",
"avatar_url": "https://avatars3.githubusercontent.com/u/1679437?v=4",
"profile": "https://bitbucket.org/hannespernpeintner/",
"contributions": [
"code"
]
},
{
"login": "leogtzr",
"name": "Leo Gutiérrez Ramírez",
"avatar_url": "https://avatars0.githubusercontent.com/u/1211969?v=4",
"profile": "https://github.com/leogtzr",
"contributions": [
"code"
]
},
{
"login": "npczwh",
"name": "Zhang WH",
"avatar_url": "https://avatars0.githubusercontent.com/u/14066422?v=4",
"profile": "https://github.com/npczwh",
"contributions": [
"code"
]
},
{
"login": "oconnelc",
"name": "Christopher O'Connell",
"avatar_url": "https://avatars0.githubusercontent.com/u/1112973?v=4",
"profile": "https://github.com/oconnelc",
"contributions": [
"code"
]
},
{
"login": "giorgosmav21",
"name": "George Mavroeidis",
"avatar_url": "https://avatars2.githubusercontent.com/u/22855493?v=4",
"profile": "https://github.com/giorgosmav21",
"contributions": [
"code"
]
},
{
"login": "hbothra15",
"name": "Hemant Bothra",
"avatar_url": "https://avatars1.githubusercontent.com/u/7418012?v=4",
"profile": "https://github.com/hbothra15",
"contributions": [
"code",
"design"
]
},
{
"login": "igeligel",
"name": "Kevin Peters",
"avatar_url": "https://avatars1.githubusercontent.com/u/12736734?v=4",
"profile": "https://www.kevinpeters.net/about/",
"contributions": [
"code"
]
},
{
"login": "llorllale",
"name": "George Aristy",
"avatar_url": "https://avatars1.githubusercontent.com/u/2019896?v=4",
"profile": "https://llorllale.github.io/",
"contributions": [
"code"
]
},
{
"login": "mookkiah",
"name": "Mahendran Mookkiah",
"avatar_url": "https://avatars1.githubusercontent.com/u/8975264?v=4",
"profile": "https://github.com/mookkiah",
"contributions": [
"code"
]
},
{
"login": "Azureyjt",
"name": "Azureyjt",
"avatar_url": "https://avatars2.githubusercontent.com/u/18476317?v=4",
"profile": "https://github.com/Azureyjt",
"contributions": [
"code"
]
},
{
"login": "vehpsr",
"name": "gans",
"avatar_url": "https://avatars2.githubusercontent.com/u/3133265?v=4",
"profile": "https://github.com/vehpsr",
"contributions": [
"code"
]
},
{
"login": "ThatGuyWithTheHat",
"name": "Matt",
"avatar_url": "https://avatars0.githubusercontent.com/u/24470582?v=4",
"profile": "https://github.com/ThatGuyWithTheHat",
"contributions": [
"content"
]
},
{
"login": "gopinath-langote",
"name": "Gopinath Langote",
"avatar_url": "https://avatars2.githubusercontent.com/u/10210778?v=4",
"profile": "https://www.linkedin.com/in/gopinathlangote/",
"contributions": [
"code"
]
},
{
"login": "hoswey",
"name": "Hoswey",
"avatar_url": "https://avatars3.githubusercontent.com/u/3689445?v=4",
"profile": "https://github.com/hoswey",
"contributions": [
"code"
]
},
{
"login": "amit2103",
"name": "Amit Pandey",
"avatar_url": "https://avatars3.githubusercontent.com/u/7566692?v=4",
"profile": "https://github.com/amit2103",
"contributions": [
"code"
]
},
{
"login": "gwildor28",
"name": "gwildor28",
"avatar_url": "https://avatars0.githubusercontent.com/u/16000365?v=4",
"profile": "https://github.com/gwildor28",
"contributions": [
"content"
]
},
{
"login": "llitfkitfk",
"name": "田浩",
"avatar_url": "https://avatars1.githubusercontent.com/u/2404785?v=4",
"profile": "https://t.me/paul_docker",
"contributions": [
"content"
]
},
{
"login": "pitsios-s",
"name": "Stamatis Pitsios",
"avatar_url": "https://avatars1.githubusercontent.com/u/6773603?v=4",
"profile": "https://twitter.com/StPitsios",
"contributions": [
"code"
]
},
{
"login": "qza",
"name": "qza",
"avatar_url": "https://avatars3.githubusercontent.com/u/233149?v=4",
"profile": "https://github.com/qza",
"contributions": [
"code"
]
},
{
"login": "Tschis",
"name": "Rodolfo Forte",
"avatar_url": "https://avatars1.githubusercontent.com/u/20662669?v=4",
"profile": "http://tschis.github.io",
"contributions": [
"content"
]
},
{
"login": "ankurkaushal",
"name": "Ankur Kaushal",
"avatar_url": "https://avatars2.githubusercontent.com/u/2236616?v=4",
"profile": "https://github.com/ankurkaushal",
"contributions": [
"code"
]
},
{
"login": "okinskas",
"name": "Ovidijus Okinskas",
"avatar_url": "https://avatars0.githubusercontent.com/u/20372387?v=4",
"profile": "https://www.linkedin.com/in/ovidijus-okinskas/",
"contributions": [
"code"
]
},
{
"login": "robertt240",
"name": "Robert Kasperczyk",
"avatar_url": "https://avatars1.githubusercontent.com/u/9137432?v=4",
"profile": "https://github.com/robertt240",
"contributions": [
"code"
]
},
{
"login": "trautonen",
"name": "Tapio Rautonen",
"avatar_url": "https://avatars3.githubusercontent.com/u/1641063?v=4",
"profile": "https://github.com/trautonen",
"contributions": [
"code"
]
},
{
"login": "yorlov",
"name": "Yuri Orlov",
"avatar_url": "https://avatars0.githubusercontent.com/u/1595733?v=4",
"profile": "http://vk.com/yuri.orlov",
"contributions": [
"code"
]
},
{
"login": "varunu28",
"name": "Varun Upadhyay",
"avatar_url": "https://avatars0.githubusercontent.com/u/7676016?v=4",
"profile": "https://www.linkedin.com/in/varunu28/",
"contributions": [
"code"
]
},
{
"login": "PalAditya",
"name": "Aditya Pal",
"avatar_url": "https://avatars2.githubusercontent.com/u/25523604?v=4",
"profile": "https://github.com/PalAditya",
"contributions": [
"code"
]
},
{
"login": "grzesiekkedzior",
"name": "grzesiekkedzior",
"avatar_url": "https://avatars3.githubusercontent.com/u/23739158?v=4",
"profile": "https://github.com/grzesiekkedzior",
"contributions": [
"code",
"review"
]
},
{
"login": "sivasubramanim",
"name": "Sivasubramani M",
"avatar_url": "https://avatars2.githubusercontent.com/u/51107434?v=4",
"profile": "https://github.com/sivasubramanim",
"contributions": [
"code"
]
},
{
"login": "d4gg4d",
"name": "Sami Airaksinen",
"avatar_url": "https://avatars2.githubusercontent.com/u/99457?v=4",
"profile": "https://github.com/d4gg4d",
"contributions": [
"code"
]
},
{
"login": "vertti",
"name": "Janne Sinivirta",
"avatar_url": "https://avatars0.githubusercontent.com/u/557751?v=4",
"profile": "https://github.com/vertti",
"contributions": [
"code"
]
},
{
"login": "Bobo1239",
"name": "Boris-Chengbiao Zhou",
"avatar_url": "https://avatars1.githubusercontent.com/u/2302947?v=4",
"profile": "https://github.com/Bobo1239",
"contributions": [
"content"
]
},
{
"login": "Jahhein",
"name": "Jacob Hein",
"avatar_url": "https://avatars2.githubusercontent.com/u/10779515?v=4",
"profile": "https://jahhein.github.io",
"contributions": [
"content"
]
},
{
"login": "iamrichardjones",
"name": "Richard Jones",
"avatar_url": "https://avatars3.githubusercontent.com/u/14842151?v=4",
"profile": "https://github.com/iamrichardjones",
"contributions": [
"content"
]
},
{
"login": "rachelcarmena",
"name": "Rachel M. Carmena",
"avatar_url": "https://avatars0.githubusercontent.com/u/22792183?v=4",
"profile": "https://rachelcarmena.github.io",
"contributions": [
"content"
]
},
{
"login": "zd-zero",
"name": "Zaerald Denze Lungos",
"avatar_url": "https://avatars0.githubusercontent.com/u/21978370?v=4",
"profile": "https://zd-zero.github.io",
"contributions": [
"content"
]
},
{
"login": "webpro",
"name": "Lars Kappert",
"avatar_url": "https://avatars1.githubusercontent.com/u/456426?v=4",
"profile": "https://webpro.nl",
"contributions": [
"content"
]
},
{
"login": "xiaod-dev",
"name": "Mike Liu",
"avatar_url": "https://avatars2.githubusercontent.com/u/21277644?v=4",
"profile": "https://xiaod.info",
"contributions": [
"translation"
]
},
{
"login": "charlesfinley",
"name": "Matt Dolan",
"avatar_url": "https://avatars1.githubusercontent.com/u/6307904?v=4",
"profile": "https://github.com/charlesfinley",
"contributions": [
"code",
"review"
]
},
{
"login": "MananS77",
"name": "Manan",
"avatar_url": "https://avatars3.githubusercontent.com/u/21033516?v=4",
"profile": "https://github.com/MananS77",
"contributions": [
"review"
]
},
{
"login": "nishant",
"name": "Nishant Arora",
"avatar_url": "https://avatars2.githubusercontent.com/u/15331971?v=4",
"profile": "https://github.com/nishant",
"contributions": [
"code"
]
},
{
"login": "raja-peeyush-kumar-singh",
"name": "Peeyush",
"avatar_url": "https://avatars0.githubusercontent.com/u/5496024?v=4",
"profile": "https://github.com/raja-peeyush-kumar-singh",
"contributions": [
"code"
]
},
{
"login": "ravening",
"name": "Rakesh",
"avatar_url": "https://avatars1.githubusercontent.com/u/10645273?v=4",
"profile": "https://github.com/ravening",
"contributions": [
"code",
"review"
]
},
{
"login": "vINCENT8888801",
"name": "Wei Seng",
"avatar_url": "https://avatars0.githubusercontent.com/u/8037883?v=4",
"profile": "https://github.com/vINCENT8888801",
"contributions": [
"code"
]
},
{
"login": "ashishtrivedi16",
"name": "Ashish Trivedi",
"avatar_url": "https://avatars3.githubusercontent.com/u/23194128?v=4",
"profile": "https://www.linkedin.com/in/ashish-trivedi-218379135/",
"contributions": [
"code"
]
},
{
"login": "RayYH",
"name": "洪月阳",
"avatar_url": "https://avatars1.githubusercontent.com/u/41055099?v=4",
"profile": "https://rayyounghong.com",
"contributions": [
"code"
]
},
{
"login": "xdvrx1",
"name": "xdvrx1",
"avatar_url": "https://avatars0.githubusercontent.com/u/47092464?v=4",
"profile": "https://xdvrx1.github.io/",
"contributions": [
"review",
"ideas"
]
},
{
"login": "nahteb",
"name": "Bethan Palmer",
"avatar_url": "https://avatars3.githubusercontent.com/u/13121570?v=4",
"profile": "https://github.com/nahteb",
"contributions": [
"code"
]
},
{
"login": "ToxicDreamz",
"name": "Toxic Dreamz",
"avatar_url": "https://avatars0.githubusercontent.com/u/45225562?v=4",
"profile": "https://github.com/ToxicDreamz",
"contributions": [
"code"
]
},
{
"login": "edycutjong",
"name": "Edy Cu Tjong",
"avatar_url": "https://avatars1.githubusercontent.com/u/1098102?v=4",
"profile": "http://www.edycutjong.com",
"contributions": [
"doc"
]
},
{
"login": "mkrzywanski",
"name": "Michał Krzywański",
"avatar_url": "https://avatars0.githubusercontent.com/u/15279585?v=4",
"profile": "https://github.com/mkrzywanski",
"contributions": [
"code"
]
},
{
"login": "stefanbirkner",
"name": "Stefan Birkner",
"avatar_url": "https://avatars1.githubusercontent.com/u/711349?v=4",
"profile": "https://www.stefan-birkner.de",
"contributions": [
"code"
]
},
{
"login": "fedorskvorcov",
"name": "Fedor Skvorcov",
"avatar_url": "https://avatars3.githubusercontent.com/u/43882212?v=4",
"profile": "https://github.com/fedorskvorcov",
"contributions": [
"code"
]
},
{
"login": "samilAyoub",
"name": "samilAyoub",
"avatar_url": "https://avatars0.githubusercontent.com/u/61546990?v=4",
"profile": "https://github.com/samilAyoub",
"contributions": [
"code"
]
},
{
"login": "vdlald",
"name": "Vladislav Golubinov",
"avatar_url": "https://avatars0.githubusercontent.com/u/29997701?v=4",
"profile": "https://github.com/vdlald",
"contributions": [
"code"
]
},
{
"login": "swarajsaaj",
"name": "Swaraj",
"avatar_url": "https://avatars2.githubusercontent.com/u/6285049?v=4",
"profile": "https://github.com/swarajsaaj",
"contributions": [
"code"
]
},
{
"login": "ChFlick",
"name": "Christoph Flick",
"avatar_url": "https://avatars0.githubusercontent.com/u/4465376?v=4",
"profile": "http://christophflick.de",
"contributions": [
"doc"
]
},
{
"login": "Ascenio",
"name": "Ascênio",
"avatar_url": "https://avatars1.githubusercontent.com/u/7662016?v=4",
"profile": "https://github.com/Ascenio",
"contributions": [
"review"
]
},
{
"login": "dsibilio",
"name": "Domenico Sibilio",
"avatar_url": "https://avatars2.githubusercontent.com/u/24280982?v=4",
"profile": "https://www.linkedin.com/in/domenico-sibilio/",
"contributions": [
"doc"
]
},
{
"login": "akashchandwani",
"name": "Akash Chandwani",
"avatar_url": "https://avatars2.githubusercontent.com/u/3483277?v=4",
"profile": "https://github.com/akashchandwani",
"contributions": [
"review"
]
},
{
"login": "manannikov",
"name": "Pavlo Manannikov",
"avatar_url": "https://avatars2.githubusercontent.com/u/7019769?v=4",
"profile": "http://www.linkedin.com/in/manannikov",
"contributions": [
"code"
]
},
{
"login": "eimanip",
"name": "Eiman",
"avatar_url": "https://avatars0.githubusercontent.com/u/20307301?v=4",
"profile": "https://github.com/eimanip",
"contributions": [
"code"
]
},
{
"login": "OrangePants-R",
"name": "Rocky",
"avatar_url": "https://avatars0.githubusercontent.com/u/42976136?v=4",
"profile": "https://github.com/OrangePants-R",
"contributions": [
"doc"
]
},
{
"login": "ibrahimAlii",
"name": "Ibrahim ali abdelghany",
"avatar_url": "https://avatars2.githubusercontent.com/u/21141301?v=4",
"profile": "https://ibrahimalii.github.io/",
"contributions": [
"review"
]
},
{
"login": "gkulkarni2020",
"name": "Girish Kulkarni",
"avatar_url": "https://avatars3.githubusercontent.com/u/5161548?v=4",
"profile": "https://github.com/gkulkarni2020",
"contributions": [
"doc"
]
},
{
"login": "omk13",
"name": "Omar Karazoun",
"avatar_url": "https://avatars0.githubusercontent.com/u/59054172?v=4",
"profile": "https://github.com/omk13",
"contributions": [
"code"
]
},
{
"login": "jeff303",
"name": "Jeff Evans",
"avatar_url": "https://avatars0.githubusercontent.com/u/3521562?v=4",
"profile": "https://github.com/jeff303",
"contributions": [
"code"
]
},
{
"login": "viveksb007",
"name": "Vivek Singh",
"avatar_url": "https://avatars1.githubusercontent.com/u/12713808?v=4",
"profile": "https://viveksb007.github.io",
"contributions": [
"code"
]
},
{
"login": "siavashsoleymani",
"name": "siavash",
"avatar_url": "https://avatars2.githubusercontent.com/u/18074419?v=4",
"profile": "https://github.com/siavashsoleymani",
"contributions": [
"code"
]
},
{
"login": "ruchpeanuts",
"name": "ruchpeanuts",
"avatar_url": "https://avatars0.githubusercontent.com/u/29301900?v=4",
"profile": "https://github.com/ruchpeanuts",
"contributions": [
"doc"
]
},
{
"login": "warp125",
"name": "warp125",
"avatar_url": "https://avatars1.githubusercontent.com/u/48073115?v=4",
"profile": "https://github.com/warp125",
"contributions": [
"translation"
]
},
{
"login": "tkhadir",
"name": "KHADIR Tayeb",
"avatar_url": "https://avatars1.githubusercontent.com/u/45130488?v=4",
"profile": "http://libkhadir.fr",
"contributions": [
"translation"
]
},
{
"login": "ignite1771",
"name": "ignite1771",
"avatar_url": "https://avatars2.githubusercontent.com/u/59446563?v=4",
"profile": "https://github.com/ignite1771",
"contributions": [
"code"
]
},
{
"login": "demirhalil",
"name": "Halil Demir",
"avatar_url": "https://avatars1.githubusercontent.com/u/22895118?v=4",
"profile": "https://github.com/demirhalil",
"contributions": [
"translation"
]
},
{
"login": "rohit10000",
"name": "Rohit Singh",
"avatar_url": "https://avatars.githubusercontent.com/u/20845565?v=4",
"profile": "https://github.com/rohit10000",
"contributions": [
"code"
]
},
{
"login": "byoungju94",
"name": "byoungju94",
"avatar_url": "https://avatars.githubusercontent.com/u/42516378?v=4",
"profile": "https://github.com/byoungju94",
"contributions": [
"code"
]
},
{
"login": "moustafafarhat",
"name": "Moustafa Farhat",
"avatar_url": "https://avatars.githubusercontent.com/u/38836727?v=4",
"profile": "https://github.com/moustafafarhat",
"contributions": [
"translation"
]
},
{
"login": "richardmr36",
"name": "Martel Richard",
"avatar_url": "https://avatars.githubusercontent.com/u/19147333?v=4",
"profile": "https://github.com/richardmr36",
"contributions": [
"code"
]
},
{
"login": "va1m",
"name": "va1m",
"avatar_url": "https://avatars.githubusercontent.com/u/17025445?v=4",
"profile": "https://github.com/va1m",
"contributions": [
"code"
]
},
{
"login": "noamgrinch",
"name": "Noam Greenshtain",
"avatar_url": "https://avatars.githubusercontent.com/u/31648669?v=4",
"profile": "https://github.com/noamgrinch",
"contributions": [
"code"
]
},
{
"login": "qfxl",
"name": "yonghong Xu",
"avatar_url": "https://avatars.githubusercontent.com/u/14086462?v=4",
"profile": "https://xuyonghong.cn/",
"contributions": [
"doc"
]
},
{
"login": "jinishavora",
"name": "jinishavora",
"avatar_url": "https://avatars.githubusercontent.com/u/40777762?v=4",
"profile": "https://www.linkedin.com/in/jinisha-vora",
"contributions": [
"review",
"code"
]
},
{
"login": "eas5",
"name": "Elvys Soares",
"avatar_url": "https://avatars.githubusercontent.com/u/50836521?v=4",
"profile": "https://github.com/eas5",
"contributions": [
"code"
]
},
{
"login": "zWeBrain",
"name": "zWeBrain",
"avatar_url": "https://avatars.githubusercontent.com/u/46642512?v=4",
"profile": "https://github.com/zWeBrain",
"contributions": [
"code"
]
},
{
"login": "Al-assad",
"name": "余林颖",
"avatar_url": "https://avatars.githubusercontent.com/u/22493821?v=4",
"profile": "https://al-assad.github.io/notion/",
"contributions": [
"translation"
]
},
{
"login": "STudio26",
"name": "Alain",
"avatar_url": "https://avatars.githubusercontent.com/u/6988911?v=4",
"profile": "https://github.com/STudio26",
"contributions": [
"translation"
]
},
{
"login": "DEV-VRUPER",
"name": "VR",
"avatar_url": "https://avatars.githubusercontent.com/u/30525467?v=4",
"profile": "https://github.com/DEV-VRUPER",
"contributions": [
"doc"
]
},
{
"login": "JackieNim",
"name": "JackieNim",
"avatar_url": "https://avatars.githubusercontent.com/u/4138836?v=4",
"profile": "https://github.com/JackieNim",
"contributions": [
"code"
]
},
{
"login": "EdisonE3",
"name": "EdisonE3",
"avatar_url": "https://avatars.githubusercontent.com/u/52118917?v=4",
"profile": "https://github.com/EdisonE3",
"contributions": [
"code"
]
},
{
"login": "tao-sun2",
"name": "Tao",
"avatar_url": "https://avatars.githubusercontent.com/u/66189688?v=4",
"profile": "https://github.com/tao-sun2",
"contributions": [
"code"
]
},
{
"login": "JuanManuelAbate",
"name": "Juan Manuel Abate",
"avatar_url": "https://avatars.githubusercontent.com/u/16357060?v=4",
"profile": "https://github.com/JuanManuelAbate",
"contributions": [
"translation"
]
},
{
"login": "Xenilo137",
"name": "Xenilo137",
"avatar_url": "https://avatars.githubusercontent.com/u/24865069?v=4",
"profile": "https://github.com/Xenilo137",
"contributions": [
"code"
]
},
{
"login": "samuelpsouza",
"name": "Samuel Souza",
"avatar_url": "https://avatars.githubusercontent.com/u/17254162?v=4",
"profile": "https://www.linkedin.com/in/souzasamuel/",
"contributions": [
"code",
"doc"
]
},
{
"login": "marlo2222",
"name": "Marlo Henrique",
"avatar_url": "https://avatars.githubusercontent.com/u/40809563?v=4",
"profile": "https://github.com/marlo2222",
"contributions": [
"translation"
]
},
{
"login": "AndriyPyzh",
"name": "AndriyPyzh",
"avatar_url": "https://avatars.githubusercontent.com/u/57706635?v=4",
"profile": "https://github.com/AndriyPyzh",
"contributions": [
"code"
]
},
{
"login": "karthikbhat13",
"name": "karthikbhat13",
"avatar_url": "https://avatars.githubusercontent.com/u/22431014?v=4",
"profile": "https://github.com/karthikbhat13",
"contributions": [
"code"
]
},
{
"login": "mortezaadi",
"name": "Morteza Adigozalpour",
"avatar_url": "https://avatars.githubusercontent.com/u/1329687?v=4",
"profile": "https://github.com/mortezaadi",
"contributions": [
"code"
]
},
{
"login": "tan31989",
"name": "Nagaraj Tantri",
"avatar_url": "https://avatars.githubusercontent.com/u/3784194?v=4",
"profile": "https://stackoverflow.com/users/308565/nagaraj-tantri",
"contributions": [
"code"
]
},
{
"login": "frascu",
"name": "Francesco Scuccimarri",
"avatar_url": "https://avatars.githubusercontent.com/u/7107651?v=4",
"profile": "https://github.com/frascu",
"contributions": [
"code"
]
},
{
"login": "Conhan93",
"name": "Conny Hansson",
"avatar_url": "https://avatars.githubusercontent.com/u/71334757?v=4",
"profile": "https://github.com/Conhan93",
"contributions": [
"doc"
]
},
{
"login": "muklasr",
"name": "Muklas Rahmanto",
"avatar_url": "https://avatars.githubusercontent.com/u/43443753?v=4",
"profile": "http://muklasr.medium.com",
"contributions": [
"translation"
]
},
{
"login": "VxDxK",
"name": "Vadim",
"avatar_url": "https://avatars.githubusercontent.com/u/38704817?v=4",
"profile": "https://github.com/VxDxK",
"contributions": [
"translation"
]
},
{
"login": "sims-keshri",
"name": "Simran Keshri",
"avatar_url": "https://avatars.githubusercontent.com/u/62168475?v=4",
"profile": "https://github.com/sims-keshri",
"contributions": [
"code"
]
},
{
"login": "JCarlosR",
"name": "JCarlos",
"avatar_url": "https://avatars.githubusercontent.com/u/3101238?v=4",
"profile": "https://programacionymas.com",
"contributions": [
"translation"
]
},
{
"login": "Dev-AliGhasemi",
"name": "Ali Ghasemi",
"avatar_url": "https://avatars.githubusercontent.com/u/60359433?v=4",
"profile": "https://www.mrmoshkel.ir",
"contributions": [
"code"
]
},
{
"login": "carldea",
"name": "Carl Dea",
"avatar_url": "https://avatars.githubusercontent.com/u/1594624?v=4",
"profile": "http://carlfx.wordpress.com",
"contributions": [
"code"
]
},
{
"login": "Mozartuss",
"name": "Mozartus",
"avatar_url": "https://avatars.githubusercontent.com/u/32893711?v=4",
"profile": "https://github.com/Mozartuss",
"contributions": [
"translation"
]
},
{
"login": "ManviGoel26",
"name": "Manvi Goel",
"avatar_url": "https://avatars.githubusercontent.com/u/55682355?v=4",
"profile": "https://github.com/ManviGoel26",
"contributions": [
"doc"
]
},
{
"login": "blueberry404",
"name": "Anum Amin",
"avatar_url": "https://avatars.githubusercontent.com/u/39243539?v=4",
"profile": "https://github.com/blueberry404",
"contributions": [
"doc"
]
},
{
"login": "uh-zz",
"name": "Reo Uehara",
"avatar_url": "https://avatars.githubusercontent.com/u/47747828?v=4",
"profile": "https://uh-zz.github.io/blog/",
"contributions": [
"translation"
]
},
{
"login": "Fiordy",
"name": "Fiordy",
"avatar_url": "https://avatars.githubusercontent.com/u/53420573?v=4",
"profile": "https://github.com/Fiordy",
"contributions": [
"doc"
]
},
{
"login": "harshalkh",
"name": "Harshal",
"avatar_url": "https://avatars.githubusercontent.com/u/37841724?v=4",
"profile": "https://github.com/harshalkh",
"contributions": [
"code"
]
},
{
"login": "vashisthabhinav",
"name": "Abhinav Vashisth",
"avatar_url": "https://avatars.githubusercontent.com/u/89785800?v=4",
"profile": "https://www.linkedin.com/in/abhinav-vashisth-06613b208/",
"contributions": [
"doc"
]
},
{
"login": "Kevinyl3",
"name": "Kevin",
"avatar_url": "https://avatars.githubusercontent.com/u/47126749?v=4",
"profile": "http://no website",
"contributions": [
"review",
"code"
]
},
{
"login": "Shrirang97",
"name": "Shrirang",
"avatar_url": "https://avatars.githubusercontent.com/u/28738668?v=4",
"profile": "https://github.com/Shrirang97",
"contributions": [
"review",
"code"
]
},
{
"login": "interactwithankush",
"name": "interactwithankush",
"avatar_url": "https://avatars.githubusercontent.com/u/18613127?v=4",
"profile": "https://github.com/interactwithankush",
"contributions": [
"code"
]
},
{
"login": "yuhangbin",
"name": "CharlieYu",
"avatar_url": "https://avatars.githubusercontent.com/u/17566866?v=4",
"profile": "https://github.com/yuhangbin",
"contributions": [
"code"
]
},
{
"login": "Leisterbecker",
"name": "Leisterbecker",
"avatar_url": "https://avatars.githubusercontent.com/u/20650323?v=4",
"profile": "https://github.com/Leisterbecker",
"contributions": [
"code"
]
},
{
"login": "castleKing1997",
"name": "DragonDreamer",
"avatar_url": "https://avatars.githubusercontent.com/u/35420129?v=4",
"profile": "http://rosaecrucis.cn",
"contributions": [
"code"
]
},
{
"login": "ShivanshCharak",
"name": "ShivanshCharak",
"avatar_url": "https://avatars.githubusercontent.com/u/96943825?v=4",
"profile": "https://github.com/ShivanshCharak",
"contributions": [
"code"
]
},
{
"login": "HattoriHenzo",
"name": "HattoriHenzo",
"avatar_url": "https://avatars.githubusercontent.com/u/5141285?v=4",
"profile": "https://github.com/HattoriHenzo",
"contributions": [
"code"
]
},
{
"login": "arnabsen1729",
"name": "Arnab Sen",
"avatar_url": "https://avatars.githubusercontent.com/u/51032928?v=4",
"profile": "http://arnabsen.bio.link",
"contributions": [
"code"
]
},
{
"login": "mohanaraosv",
"name": "MohanaRao SV",
"avatar_url": "https://avatars.githubusercontent.com/u/1470114?v=4",
"profile": "https://javaforlife.wordpress.com/",
"contributions": [
"code"
]
},
{
"login": "yonatankarp",
"name": "Yonatan Karp-Rudin",
"avatar_url": "https://avatars.githubusercontent.com/u/14914865?v=4",
"profile": "https://github.com/yonatankarp",
"contributions": [
"code",
"review"
]
},
{
"login": "GustavoOliani",
"name": "Oliani",
"avatar_url": "https://avatars.githubusercontent.com/u/25756378?v=4",
"profile": "https://github.com/GustavoOliani",
"contributions": [
"code"
]
},
{
"login": "Liu-rj",
"name": "Renjie LIU",
"avatar_url": "https://avatars.githubusercontent.com/u/64826925?v=4",
"profile": "https://github.com/Liu-rj",
"contributions": [
"code"
]
},
{
"login": "TreeFireMen",
"name": "perfect guy",
"avatar_url": "https://avatars.githubusercontent.com/u/54127694?v=4",
"profile": "https://github.com/TreeFireMen",
"contributions": [
"doc"
]
},
{
"login": "xyllq999",
"name": "xyllq999",
"avatar_url": "https://avatars.githubusercontent.com/u/72729433?v=4",
"profile": "https://github.com/xyllq999",
"contributions": [
"code"
]
},
{
"login": "dmdbilal",
"name": "Mohamed Bilal",
"avatar_url": "https://avatars.githubusercontent.com/u/91405690?v=4",
"profile": "https://github.com/dmdbilal",
"contributions": [
"doc"
]
},
{
"login": "karshil2309",
"name": "Karshil sheth",
"avatar_url": "https://avatars.githubusercontent.com/u/37497287?v=4",
"profile": "https://www.linkedin.com/in/karshilsheth/",
"contributions": [
"code"
]
},
{
"login": "kongleong86",
"name": "kongleong86",
"avatar_url": "https://avatars.githubusercontent.com/u/3745455?v=4",
"profile": "https://github.com/kongleong86",
"contributions": [
"code"
]
},
{
"login": "aitorfi",
"name": "Aitor Fidalgo Sánchez",
"avatar_url": "https://avatars.githubusercontent.com/u/64830228?v=4",
"profile": "https://github.com/aitorfi",
"contributions": [
"translation",
"doc",
"review"
]
},
{
"login": "HeVictor",
"name": "Victor He",
"avatar_url": "https://avatars.githubusercontent.com/u/20733994?v=4",
"profile": "https://github.com/HeVictor",
"contributions": [
"code"
]
},
{
"login": "m-inh",
"name": "Minh Nguyen",
"avatar_url": "https://avatars.githubusercontent.com/u/10632233?v=4",
"profile": "http://m-inh.github.io/",
"contributions": [
"translation",
"doc"
]
},
{
"login": "HeVictor",
"name": "Victor He",
"avatar_url": "https://avatars.githubusercontent.com/u/20733994?v=4",
"profile": "https://github.com/HeVictor",
"contributions": [
"doc"
]
},
{
"login": "YichuanSun",
"name": "yiichan",
"avatar_url": "https://avatars.githubusercontent.com/u/30886176?v=4",
"profile": "https://github.com/YichuanSun",
"contributions": [
"doc"
]
},
{
"login": "PanSem",
"name": "Pan Sem",
"avatar_url": "https://avatars.githubusercontent.com/u/43316964?v=4",
"profile": "https://github.com/PanSem",
"contributions": [
"doc"
]
},
{
"login": "zhoumengyks",
"name": "zhoumengyks",
"avatar_url": "https://avatars.githubusercontent.com/u/111965739?v=4",
"profile": "https://github.com/zhoumengyks",
"contributions": [
"code"
]
},
{
"login": "you",
"name": "you",
"avatar_url": "https://avatars.githubusercontent.com/u/57100752?v=4",
"profile": "https://github.com/you",
"contributions": [
"translation"
]
},
{
"login": "Thanks",
"name": "Thanks",
"avatar_url": "https://avatars.githubusercontent.com/u/1121545?v=4",
"profile": "https://github.com/thanks",
"contributions": [
"translation"
]
},
{
"login": "lazy-pr0grammer",
"name": "LazyProgrammer",
"avatar_url": "https://avatars.githubusercontent.com/u/87204946?v=4",
"profile": "https://github.com/lazy-pr0grammer",
"contributions": [
"doc"
]
},
{
"login": "mdfaizanahmed786",
"name": "Mohammed Faizan Ahmed",
"avatar_url": "https://avatars.githubusercontent.com/u/85175130?v=4",
"profile": "https://github.com/mdfaizanahmed786",
"contributions": [
"doc"
]
},
{
"login": "burno1",
"name": "Bruno Fernandes",
"avatar_url": "https://avatars.githubusercontent.com/u/39165280?v=4",
"profile": "https://github.com/burno1",
"contributions": [
"code"
]
},
{
"login": "SammanPali",
"name": "SammanPali",
"avatar_url": "https://avatars.githubusercontent.com/u/110753804?v=4",
"profile": "https://github.com/SammanPali",
"contributions": [
"doc"
]
},
{
"login": "LeseChe",
"name": "Qixiang Chen",
"avatar_url": "https://avatars.githubusercontent.com/u/79553089?v=4",
"profile": "https://github.com/LeseChe",
"contributions": [
"doc"
]
},
{
"login": "shouryamanekar",
"name": "Shourya Manekar",
"avatar_url": "https://avatars.githubusercontent.com/u/72398499?v=4",
"profile": "https://github.com/shouryamanekar",
"contributions": [
"translation"
]
},
{
"login": "seongkyu-lim",
"name": "Alan",
"avatar_url": "https://avatars.githubusercontent.com/u/55138532?v=4",
"profile": "https://seongkyu-lim.github.io/Blog/",
"contributions": [
"translation"
]
},
{
"login": "JanFidor",
"name": "JanFidor",
"avatar_url": "https://avatars.githubusercontent.com/u/66260538?v=4",
"profile": "https://github.com/JanFidor",
"contributions": [
"code",
"doc"
]
},
{
"login": "drakulavich",
"name": "Anton Yakutovich",
"avatar_url": "https://avatars.githubusercontent.com/u/129260?v=4",
"profile": "https://github.com/drakulavich",
"contributions": [
"code"
]
},
{
"login": "steph88ss",
"name": "steph88ss",
"avatar_url": "https://avatars.githubusercontent.com/u/111041594?v=4",
"profile": "https://github.com/steph88ss",
"contributions": [
"doc"
]
},
{
"login": "0xYujan",
"name": "Yujan Ranjitkar",
"avatar_url": "https://avatars.githubusercontent.com/u/63731234?v=4",
"profile": "http://yujanranjitkar.com.np",
"contributions": [
"translation"
]
},
{
"login": "yusha-g",
"name": "yusha-g",
"avatar_url": "https://avatars.githubusercontent.com/u/110189579?v=4",
"profile": "https://github.com/yusha-g",
"contributions": [
"translation"
]
},
{
"login": "robertvolkmann",
"name": "Robert Volkmann",
"avatar_url": "https://avatars.githubusercontent.com/u/20912167?v=4",
"profile": "https://github.com/robertvolkmann",
"contributions": [
"code",
"review"
]
},
{
"login": "bipin-k",
"name": "Bipin Kumar Chaurasia",
"avatar_url": "https://avatars.githubusercontent.com/u/21119358?v=4",
"profile": "https://github.com/bipin-k",
"contributions": [
"doc"
]
},
{
"login": "KyleSong30",
"name": "KyleSong30",
"avatar_url": "https://avatars.githubusercontent.com/u/100892032?v=4",
"profile": "https://github.com/KyleSong30",
"contributions": [
"doc"
]
},
{
"login": "u7281975",
"name": "u7281975",
"avatar_url": "https://avatars.githubusercontent.com/u/111095623?v=4",
"profile": "https://github.com/u7281975",
"contributions": [
"doc"
]
},
{
"login": "harshalkhachane",
"name": "harshalkhachane",
"avatar_url": "https://avatars.githubusercontent.com/u/92866584?v=4",
"profile": "https://github.com/harshalkhachane",
"contributions": [
"code"
]
},
{
"login": "ec-026",
"name": "Tejas Singh",
"avatar_url": "https://avatars.githubusercontent.com/u/95495584?v=4",
"profile": "https://github.com/ec-026",
"contributions": [
"doc",
"translation"
]
},
{
"login": "artfuldev",
"name": "Sudarsan Balaji",
"avatar_url": "https://avatars.githubusercontent.com/u/3091087?v=4",
"profile": "https://journal.artfuldev.com",
"contributions": [
"code"
]
},
{
"login": "vaibhav-if",
"name": "Vaibhav Agrawal",
"avatar_url": "https://avatars.githubusercontent.com/u/78676331?v=4",
"profile": "https://www.linkedin.com/in/vaibhav-agr/",
"contributions": [
"doc"
]
},
{
"login": "u7275858",
"name": "u7275858",
"avatar_url": "https://avatars.githubusercontent.com/u/110969489?v=4",
"profile": "https://github.com/u7275858",
"contributions": [
"code"
]
},
{
"login": "prasad-333",
"name": "prasad-333",
"avatar_url": "https://avatars.githubusercontent.com/u/37048768?v=4",
"profile": "https://gist.github.com/prasad-333",
"contributions": [
"doc"
]
},
{
"login": "JurenXu",
"name": "JurenXu",
"avatar_url": "https://avatars.githubusercontent.com/u/101047547?v=4",
"profile": "https://github.com/JurenXu",
"contributions": [
"code"
]
},
{
"login": "murphShaw",
"name": "murphShaw",
"avatar_url": "https://avatars.githubusercontent.com/u/111167533?v=4",
"profile": "https://github.com/murphShaw",
"contributions": [
"doc"
]
},
{
"login": "XianWu99",
"name": "XianWu99",
"avatar_url": "https://avatars.githubusercontent.com/u/111103319?v=4",
"profile": "https://github.com/XianWu99",
"contributions": [
"doc"
]
},
{
"login": "JoshuaSinglaANU",
"name": "JoshuaSinglaANU",
"avatar_url": "https://avatars.githubusercontent.com/u/109902734?v=4",
"profile": "https://github.com/JoshuaSinglaANU",
"contributions": [
"code"
]
},
{
"login": "ricardo-ramos-moura",
"name": "Ricardo Ramos",
"avatar_url": "https://avatars.githubusercontent.com/u/36955909?v=4",
"profile": "http://www.linkedin.com/in/ricardo-ramos-moura",
"contributions": [
"translation"
]
},
{
"login": "zhrfrd",
"name": "Farid Zouheir",
"avatar_url": "https://avatars.githubusercontent.com/u/72947724?v=4",
"profile": "https://zhrfrd.github.io/faridzouheir/",
"contributions": [
"translation"
]
},
{
"login": "Viniberaldo",
"name": "Vinícius A. B.",
"avatar_url": "https://avatars.githubusercontent.com/u/91766068?v=4",
"profile": "https://www.linkedin.com/in/vinicius-beraldo/",
"contributions": [
"translation"
]
},
{
"login": "StefanelStan",
"name": "Stefanel Stan",
"avatar_url": "https://avatars.githubusercontent.com/u/25990078?v=4",
"profile": "http://www.linkedin.com/in/stefanel-stan/",
"contributions": [
"code"
]
},
{
"login": "bhati00",
"name": "Prince bhati",
"avatar_url": "https://avatars.githubusercontent.com/u/79313705?v=4",
"profile": "https://github.com/bhati00",
"contributions": [
"translation"
]
},
{
"login": "wulangcode",
"name": "WuLang",
"avatar_url": "https://avatars.githubusercontent.com/u/48200100?v=4",
"profile": "https://github.com/wulangcode",
"contributions": [
"doc"
]
},
{
"login": "hkattt",
"name": "Hugo Kat",
"avatar_url": "https://avatars.githubusercontent.com/u/54300585?v=4",
"profile": "https://github.com/hkattt",
"contributions": [
"code"
]
},
{
"login": "shivu2002a",
"name": "Shivanagouda Agasimani",
"avatar_url": "https://avatars.githubusercontent.com/u/88313126?v=4",
"profile": "https://github.com/shivu2002a",
"contributions": [
"code"
]
},
{
"login": "Ap284",
"name": "Aparna",
"avatar_url": "https://avatars.githubusercontent.com/u/13827254?v=4",
"profile": "https://github.com/Ap284",
"contributions": [
"code"
]
},
{
"login": "girolamo-giordano",
"name": "Girolamo Giordano",
"avatar_url": "https://avatars.githubusercontent.com/u/56109364?v=4",
"profile": "https://github.com/girolamo-giordano",
"contributions": [
"translation"
]
},
{
"login": "Chak-C",
"name": "Chak-C",
"avatar_url": "https://avatars.githubusercontent.com/u/114961815?v=4",
"profile": "https://github.com/Chak-C",
"contributions": [
"code"
]
},
{
"login": "nakul251197",
"name": "Nakul Nambiar",
"avatar_url": "https://avatars.githubusercontent.com/u/39953357?v=4",
"profile": "https://github.com/nakul251197",
"contributions": [
"code"
]
},
{
"login": "KarmaTashiCat",
"name": "KarmaTashiCat",
"avatar_url": "https://avatars.githubusercontent.com/u/76797146?v=4",
"profile": "https://github.com/KarmaTashiCat",
"contributions": [
"translation"
]
},
{
"login": "Marikattt",
"name": "marikattt",
"avatar_url": "https://avatars.githubusercontent.com/u/49302558?v=4",
"profile": "https://github.com/Marikattt",
"contributions": [
"code"
]
},
{
"login": "Harsh4902",
"name": "Hashvardhan Parmar",
"avatar_url": "https://avatars.githubusercontent.com/u/84663071?v=4",
"profile": "https://github.com/Harsh4902",
"contributions": [
"translation"
]
},
{
"login": "yongyongkr",
"name": "YongHwan",
"avatar_url": "https://avatars.githubusercontent.com/u/67625677?v=4",
"profile": "https://hwan33.tistory.com/",
"contributions": [
"doc",
"translation"
]
},
{
"login": "shogohida",
"name": "Shogo Hida",
"avatar_url": "https://avatars.githubusercontent.com/u/10365357?v=4",
"profile": "https://github.com/shogohida",
"contributions": [
"translation"
]
},
{
"login": "Regyl",
"name": "Eugene",
"avatar_url": "https://avatars.githubusercontent.com/u/48804404?v=4",
"profile": "https://github.com/Regyl",
"contributions": [
"code"
]
},
{
"login": "piyush280599",
"name": "Piyush",
"avatar_url": "https://avatars.githubusercontent.com/u/118425491?v=4",
"profile": "https://github.com/piyush280599",
"contributions": [
"doc"
]
},
{
"login": "rahul-raj",
"name": "Rahul Raj",
"avatar_url": "https://avatars.githubusercontent.com/u/517415?v=4",
"profile": "https://www.linkedin.com/in/rahulraj90/",
"contributions": [
"code"
]
},
{
"login": "bharathkalyans",
"name": "Bharath Kalyan S",
"avatar_url": "https://avatars.githubusercontent.com/u/49526472?v=4",
"profile": "https://www.linkedin.com/in/bharathkalyans/",
"contributions": [
"code"
]
},
{
"login": "saiteja55",
"name": "Saiteja Reddy",
"avatar_url": "https://avatars.githubusercontent.com/u/13088886?v=4",
"profile": "https://www.linkedin.com/in/thisissaiteja/",
"contributions": [
"translation"
]
},
{
"login": "TheClerici",
"name": "Enrique Clerici",
"avatar_url": "https://avatars.githubusercontent.com/u/115318468?v=4",
"profile": "http://twitch.tv/clerici",
"contributions": [
"translation"
]
},
{
"login": "ramilS",
"name": "Ramil Sayetov",
"avatar_url": "https://avatars.githubusercontent.com/u/13589365?v=4",
"profile": "https://github.com/ramilS",
"contributions": [
"translation"
]
},
{
"login": "pikapiu",
"name": "东方未白",
"avatar_url": "https://avatars.githubusercontent.com/u/50656114?v=4",
"profile": "https://pkq.xyz",
"contributions": [
"code"
]
},
{
"login": "swashb0ckler",
"name": "Fredrik Sejr",
"avatar_url": "https://avatars.githubusercontent.com/u/62488841?v=4",
"profile": "https://github.com/swashb0ckler",
"contributions": [
"translation"
]
},
{
"login": "akshatarora0013",
"name": "akshatarora0013",
"avatar_url": "https://avatars.githubusercontent.com/u/102645021?v=4",
"profile": "https://github.com/akshatarora0013",
"contributions": [
"code"
]
},
{
"login": "MugheesQasim",
"name": "Mughees Qasim",
"avatar_url": "https://avatars.githubusercontent.com/u/45170085?v=4",
"profile": "https://mugheesqasimmq.wixsite.com/portfolio-website",
"contributions": [
"code"
]
},
{
"login": "behappyleee",
"name": "behappyleee",
"avatar_url": "https://avatars.githubusercontent.com/u/72903623?v=4",
"profile": "https://github.com/behappyleee",
"contributions": [
"translation"
]
},
{
"login": "Ayush-Thakur-geek",
"name": "Ayush Thakur",
"avatar_url": "https://avatars.githubusercontent.com/u/116510022?v=4",
"profile": "https://github.com/Ayush-Thakur-geek",
"contributions": [
"translation"
]
},
{
"login": "boscha1",
"name": "Anthony Bosch",
"avatar_url": "https://avatars.githubusercontent.com/u/55814237?v=4",
"profile": "https://github.com/boscha1",
"contributions": [
"code"
]
},
{
"login": "AnsonTran",
"name": "trananso",
"avatar_url": "https://avatars.githubusercontent.com/u/37683428?v=4",
"profile": "https://github.com/AnsonTran",
"contributions": [
"doc"
]
},
{
"login": "beef-e",
"name": "Giammaria Biffi",
"avatar_url": "https://avatars.githubusercontent.com/u/102854627?v=4",
"profile": "https://github.com/beef-e",
"contributions": [
"translation"
]
},
{
"login": "saif7159",
"name": "Saiful Haque",
"avatar_url": "https://avatars.githubusercontent.com/u/36008396?v=4",
"profile": "https://github.com/saif7159",
"contributions": [
"code"
]
},
{
"login": "JabezBrew",
"name": "JabezBrew",
"avatar_url": "https://avatars.githubusercontent.com/u/74483609?v=4",
"profile": "https://github.com/JabezBrew",
"contributions": [
"code"
]
},
{
"login": "konstantin-goldman",
"name": "konstantin-goldman",
"avatar_url": "https://avatars.githubusercontent.com/u/47669472?v=4",
"profile": "https://github.com/konstantin-goldman",
"contributions": [
"doc"
]
},
{
"login": "tiennm99",
"name": "Tien Nguyen Minh",
"avatar_url": "https://avatars.githubusercontent.com/u/39063457?v=4",
"profile": "https://github.com/tiennm99",
"contributions": [
"code",
"translation"
]
},
{
"login": "VladimirCreator",
"name": "Vladimir",
"avatar_url": "https://avatars.githubusercontent.com/u/49140851?v=4",
"profile": "https://github.com/VladimirCreator",
"contributions": [
"translation"
]
},
{
"login": "surjendu104",
"name": "Surjendu",
"avatar_url": "https://avatars.githubusercontent.com/u/101238933?v=4",
"profile": "https://surjendu-pal.netlify.app/",
"contributions": [
"translation",
"code"
]
},
{
"login": "bakazhou",
"name": "bakazhou",
"avatar_url": "https://avatars.githubusercontent.com/u/81795984?v=4",
"profile": "https://github.com/bakazhou",
"contributions": [
"code"
]
},
{
"login": "Owen-CH-Leung",
"name": "Owen Leung",
"avatar_url": "https://avatars.githubusercontent.com/u/43698890?v=4",
"profile": "https://github.com/Owen-CH-Leung",
"contributions": [
"code"
]
},
{
"login": "thestbar",
"name": "Stavros Barousis",
"avatar_url": "https://avatars.githubusercontent.com/u/20283468?v=4",
"profile": "https://github.com/thestbar",
"contributions": [
"doc"
]
},
{
"login": "ibrahim89",
"name": "Syyed Ibrahim Abdullah",
"avatar_url": "https://avatars.githubusercontent.com/u/20753671?v=4",
"profile": "https://github.com/ibrahim89",
"contributions": [
"translation"
]
},
{
"login": "JanisZhang",
"name": "JiaDi Zhang",
"avatar_url": "https://avatars.githubusercontent.com/u/95570096?v=4",
"profile": "https://github.com/JanisZhang",
"contributions": [
"translation"
]
},
{
"login": "sanchitbansal10",
"name": "Sanchit Bansal",
"avatar_url": "https://avatars.githubusercontent.com/u/16536741?v=4",
"profile": "https://github.com/sanchitbansal10",
"contributions": [
"doc"
]
},
{
"login": "mm-saiful6854",
"name": "Md Saiful Islam",
"avatar_url": "https://avatars.githubusercontent.com/u/48361160?v=4",
"profile": "https://github.com/mm-saiful6854",
"contributions": [
"doc"
]
},
{
"login": "AddeusExMachina",
"name": "Antonio Addeo",
"avatar_url": "https://avatars.githubusercontent.com/u/39912670?v=4",
"profile": "https://github.com/AddeusExMachina",
"contributions": [
"doc",
"code"
]
},
{
"login": "Upendra-Allagadda",
"name": "Allagadda Sai Upendranath",
"avatar_url": "https://avatars.githubusercontent.com/u/25962010?v=4",
"profile": "https://github.com/Upendra-Allagadda",
"contributions": [
"doc"
]
},
{
"login": "mathbraga",
"name": "Matheus Braga",
"avatar_url": "https://avatars.githubusercontent.com/u/31048764?v=4",
"profile": "https://www.linkedin.com/in/mobraga/",
"contributions": [
"translation",
"doc"
]
},
{
"login": "satyabarghav",
"name": "Appari Satya Barghav",
"avatar_url": "https://avatars.githubusercontent.com/u/36763910?v=4",
"profile": "https://github.com/satyabarghav",
"contributions": [
"doc"
]
},
{
"login": "mribeirodantas",
"name": "Marcel Ribeiro-Dantas",
"avatar_url": "https://avatars.githubusercontent.com/u/1023197?v=4",
"profile": "http://mribeirodantas.me",
"contributions": [
"doc"
]
},
{
"login": "hamexhanif",
"name": "Muhammad Hanif Amrullah",
"avatar_url": "https://avatars.githubusercontent.com/u/74542852?v=4",
"profile": "https://github.com/hamexhanif",
"contributions": [
"translation"
]
},
{
"login": "JackH408",
"name": "JackH408",
"avatar_url": "https://avatars.githubusercontent.com/u/141727294?v=4",
"profile": "https://github.com/JackH408",
"contributions": [
"doc"
]
},
{
"login": "versus2004",
"name": "Shubham",
"avatar_url": "https://avatars.githubusercontent.com/u/132815243?v=4",
"profile": "https://github.com/versus2004",
"contributions": [
"translation"
]
},
{
"login": "inishantjain",
"name": "Nishant Jain",
"avatar_url": "https://avatars.githubusercontent.com/u/121454072?v=4",
"profile": "https://github.com/inishantjain",
"contributions": [
"doc"
]
},
{
"login": "hallowshaw",
"name": "Rhitam Chaudhury",
"avatar_url": "https://avatars.githubusercontent.com/u/90751158?v=4",
"profile": "https://github.com/hallowshaw",
"contributions": [
"doc"
]
},
{
"login": "JerryZhao275",
"name": "JerryZhao275",
"avatar_url": "https://avatars.githubusercontent.com/u/132061401?v=4",
"profile": "https://github.com/JerryZhao275",
"contributions": [
"doc"
]
},
{
"login": "leonardol",
"name": "Leonardo Lisanti",
"avatar_url": "https://avatars.githubusercontent.com/u/1445890?v=4",
"profile": "https://twitter.com/llisant",
"contributions": [
"translation"
]
},
{
"login": "Yenniferh",
"name": "Yennifer Herrera",
"avatar_url": "https://avatars.githubusercontent.com/u/19285706?v=4",
"profile": "http://www.linkedin.com/in/yenniferh",
"contributions": [
"translation",
"review"
]
},
{
"login": "jnniu-n",
"name": "jnniu-n",
"avatar_url": "https://avatars.githubusercontent.com/u/141746282?v=4",
"profile": "https://github.com/jnniu-n",
"contributions": [
"translation",
"doc"
]
},
{
"login": "miguel-is-coding",
"name": "Miguel Angel Perez Garcia",
"avatar_url": "https://avatars.githubusercontent.com/u/48435117?v=4",
"profile": "https://github.com/miguel-is-coding",
"contributions": [
"review",
"translation"
]
},
{
"login": "SuwanSankaja",
"name": "Suwan Sankaja",
"avatar_url": "https://avatars.githubusercontent.com/u/86839778?v=4",
"profile": "https://github.com/SuwanSankaja",
"contributions": [
"translation"
]
},
{
"login": "Iamalok007",
"name": "alok",
"avatar_url": "https://avatars.githubusercontent.com/u/97467835?v=4",
"profile": "https://github.com/Iamalok007",
"contributions": [
"doc"
]
},
{
"login": "dlvideira",
"name": "Daniel Lisboa",
"avatar_url": "https://avatars.githubusercontent.com/u/53951425?v=4",
"profile": "https://github.com/dlvideira",
"contributions": [
"translation"
]
},
{
"login": "ComplexOW",
"name": "Sam Powell",
"avatar_url": "https://avatars.githubusercontent.com/u/105279107?v=4",
"profile": "https://github.com/ComplexOW",
"contributions": [
"doc"
]
},
{
"login": "jppf22",
"name": "João Fernandes",
"avatar_url": "https://avatars.githubusercontent.com/u/104360594?v=4",
"profile": "https://github.com/jppf22",
"contributions": [
"translation"
]
},
{
"login": "HongGeonUi",
"name": "Hong Geon-ui",
"avatar_url": "https://avatars.githubusercontent.com/u/89684956?v=4",
"profile": "https://github.com/HongGeonUi",
"contributions": [
"translation"
]
},
{
"login": "ylcn91",
"name": "Doksanbir",
"avatar_url": "https://avatars.githubusercontent.com/u/7249450?v=4",
"profile": "https://github.com/ylcn91",
"contributions": [
"code",
"doc",
"review"
]
},
{
"login": "Chant3ll3",
"name": "Chant3ll3",
"avatar_url": "https://avatars.githubusercontent.com/u/141697333?v=4",
"profile": "https://github.com/Chant3ll3",
"contributions": [
"doc",
"translation"
]
},
{
"login": "hwan33",
"name": "YongHwan Kwon",
"avatar_url": "https://avatars.githubusercontent.com/u/67625677?v=4",
"profile": "https://hwan33.tistory.com/",
"contributions": [
"code"
]
},
{
"login": "takikuba",
"name": "Jakub Klimek",
"avatar_url": "https://avatars.githubusercontent.com/u/58841343?v=4",
"profile": "https://github.com/takikuba",
"contributions": [
"code"
]
},
{
"login": "bachbil",
"name": "believe",
"avatar_url": "https://avatars.githubusercontent.com/u/28935461?v=4",
"profile": "https://github.com/bachbil",
"contributions": [
"translation"
]
},
{
"login": "egg0102030405",
"name": "egg0102030405",
"avatar_url": "https://avatars.githubusercontent.com/u/59650695?v=4",
"profile": "https://github.com/egg0102030405",
"contributions": [
"translation",
"doc"
]
},
{
"login": "ved-asole",
"name": "Ved Asole",
"avatar_url": "https://avatars.githubusercontent.com/u/77259804?v=4",
"profile": "http://vedasole.cloud",
"contributions": [
"code"
]
},
{
"login": "Holiday-C",
"name": "NewMorning",
"avatar_url": "https://avatars.githubusercontent.com/u/95869761?v=4",
"profile": "https://github.com/Holiday-C",
"contributions": [
"translation"
]
},
{
"login": "Kiro-Young",
"name": "资深老萌新",
"avatar_url": "https://avatars.githubusercontent.com/u/98251397?v=4",
"profile": "https://github.com/Kiro-Young",
"contributions": [
"translation"
]
},
{
"login": "Nickolodeon98",
"name": "Seunghwan Jeon",
"avatar_url": "https://avatars.githubusercontent.com/u/113348293?v=4",
"profile": "https://itistori.tistory.com/",
"contributions": [
"translation"
]
},
{
"login": "sugan0tech",
"name": "sugavanesh",
"avatar_url": "https://avatars.githubusercontent.com/u/71312159?v=4",
"profile": "https://github.com/sugan0tech",
"contributions": [
"code"
]
},
{
"login": "FinnS-F",
"name": "FinnS-F",
"avatar_url": "https://avatars.githubusercontent.com/u/126026830?v=4",
"profile": "https://github.com/FinnS-F",
"contributions": [
"code"
]
},
{
"login": "jerryyummy",
"name": "jerryyummy",
"avatar_url": "https://avatars.githubusercontent.com/u/62087610?v=4",
"profile": "https://github.com/jerryyummy",
"contributions": [
"translation"
]
},
{
"login": "Manojkumarchow",
"name": "Manoj Chowdary",
"avatar_url": "https://avatars.githubusercontent.com/u/28005510?v=4",
"profile": "https://manojkumarchow.github.io/",
"contributions": [
"code"
]
},
{
"login": "MaverickWingman",
"name": "Aditya",
"avatar_url": "https://avatars.githubusercontent.com/u/76624290?v=4",
"profile": "https://github.com/MaverickWingman",
"contributions": [
"doc",
"code"
]
},
{
"login": "nooynayr",
"name": "nooynayr",
"avatar_url": "https://avatars.githubusercontent.com/u/141696269?v=4",
"profile": "https://github.com/nooynayr",
"contributions": [
"doc"
]
},
{
"login": "pushpander1010",
"name": "CYBERCRUX2",
"avatar_url": "https://avatars.githubusercontent.com/u/41006191?v=4",
"profile": "https://github.com/pushpander1010",
"contributions": [
"doc"
]
},
{
"login": "luismateoh",
"name": "Luis Mateo Hincapié Martinez",
"avatar_url": "https://avatars.githubusercontent.com/u/44934142?v=4",
"profile": "https://github.com/luismateoh",
"contributions": [
"translation",
"review"
]
},
{
"login": "guqing",
"name": "guqing",
"avatar_url": "https://avatars.githubusercontent.com/u/38999863?v=4",
"profile": "https://guqing.io",
"contributions": [
"code"
]
},
{
"login": "sashirestela",
"name": "Sashir Estela",
"avatar_url": "https://avatars.githubusercontent.com/u/14045506?v=4",
"profile": "https://github.com/sashirestela",
"contributions": [
"code"
]
},
{
"login": "omahs",
"name": "omahs",
"avatar_url": "https://avatars.githubusercontent.com/u/73983677?v=4",
"profile": "https://github.com/omahs",
"contributions": [
"doc"
]
},
{
"login": "leiferksn",
"name": "leif e.",
"avatar_url": "https://avatars.githubusercontent.com/u/4026636?v=4",
"profile": "https://github.com/leiferksn",
"contributions": [
"code"
]
},
{
"login": "junhkang",
"name": "Jun Kang",
"avatar_url": "https://avatars.githubusercontent.com/u/20232155?v=4",
"profile": "https://junhkang.tistory.com/",
"contributions": [
"code"
]
},
{
"login": "KishalayP",
"name": "Kishalay Pandey",
"avatar_url": "https://avatars.githubusercontent.com/u/71012321?v=4",
"profile": "https://github.com/KishalayP",
"contributions": [
"code"
]
},
{
"login": "drishtii7",
"name": "drishtii7",
"avatar_url": "https://avatars.githubusercontent.com/u/82076566?v=4",
"profile": "https://github.com/drishtii7",
"contributions": [
"code"
]
},
{
"login": "DavidMedinaO",
"name": "David Medina Orozco",
"avatar_url": "https://avatars.githubusercontent.com/u/53974843?v=4",
"profile": "https://github.com/DavidMedinaO",
"contributions": [
"translation",
"review"
]
},
{
"login": "Romo4ka-bot",
"name": "Roman Leontev",
"avatar_url": "https://avatars.githubusercontent.com/u/61774094?v=4",
"profile": "https://github.com/Romo4ka-bot",
"contributions": [
"code"
]
},
{
"login": "Ehspresso",
"name": "Riley",
"avatar_url": "https://avatars.githubusercontent.com/u/144370752?v=4",
"profile": "https://github.com/Ehspresso",
"contributions": [
"code"
]
},
{
"login": "k1w1dev",
"name": "k1w1dev",
"avatar_url": "https://avatars.githubusercontent.com/u/121696782?v=4",
"profile": "https://github.com/k1w1dev",
"contributions": [
"code"
]
},
{
"login": "dev-yugantar",
"name": "dev-yugantar",
"avatar_url": "https://avatars.githubusercontent.com/u/153066190?v=4",
"profile": "https://github.com/dev-yugantar",
"contributions": [
"code"
]
},
{
"login": "Adelechka",
"name": "Adelya",
"avatar_url": "https://avatars.githubusercontent.com/u/65678470?v=4",
"profile": "https://github.com/Adelechka",
"contributions": [
"code"
]
},
{
"login": "gatlanagaprasanna",
"name": "gatlanagaprasanna",
"avatar_url": "https://avatars.githubusercontent.com/u/154739216?v=4",
"profile": "https://github.com/gatlanagaprasanna",
"contributions": [
"doc"
]
},
{
"login": "Avinash2110",
"name": "Avinash Shukla",
"avatar_url": "https://avatars.githubusercontent.com/u/37360069?v=4",
"profile": "https://github.com/Avinash2110",
"contributions": [
"code"
]
},
{
"login": "Mayankchoudhary294",
"name": "Mayank Choudhary",
"avatar_url": "https://avatars.githubusercontent.com/u/97609699?v=4",
"profile": "https://github.com/Mayankchoudhary294",
"contributions": [
"code"
]
},
{
"login": "romannimets",
"name": "romannimets",
"avatar_url": "https://avatars.githubusercontent.com/u/137268574?v=4",
"profile": "https://github.com/romannimets",
"contributions": [
"code"
]
},
{
"login": "Joel-Dandin",
"name": "Joel",
"avatar_url": "https://avatars.githubusercontent.com/u/60149879?v=4",
"profile": "https://github.com/Joel-Dandin",
"contributions": [
"code"
]
},
{
"login": "244Walyson",
"name": "Walyson Moises",
"avatar_url": "https://avatars.githubusercontent.com/u/125759796?v=4",
"profile": "https://github.com/244Walyson",
"contributions": [
"code"
]
},
{
"login": "Xcyq",
"name": "Xcyq",
"avatar_url": "https://avatars.githubusercontent.com/u/39086666?v=4",
"profile": "https://github.com/Xcyq",
"contributions": [
"code"
]
},
{
"login": "Ritabrata1080",
"name": "Ritabrata",
"avatar_url": "https://avatars.githubusercontent.com/u/60834250?v=4",
"profile": "https://github.com/Ritabrata1080",
"contributions": [
"review"
]
},
{
"login": "trivikr",
"name": "Trivikram Kamat",
"avatar_url": "https://avatars.githubusercontent.com/u/16024985?v=4",
"profile": "https://github.com/trivikr",
"contributions": [
"code"
]
},
{
"login": "vvanghelle",
"name": "Vincent Vanghelle",
"avatar_url": "https://avatars.githubusercontent.com/u/3204600?v=4",
"profile": "https://github.com/vvanghelle",
"contributions": [
"translation"
]
},
{
"login": "antoheri",
"name": "Antoine Héritier",
"avatar_url": "https://avatars.githubusercontent.com/u/79988396?v=4",
"profile": "https://github.com/antoheri",
"contributions": [
"translation"
]
},
{
"login": "fishandsheep",
"name": "QinShower",
"avatar_url": "https://avatars.githubusercontent.com/u/43347407?v=4",
"profile": "https://github.com/fishandsheep",
"contributions": [
"translation"
]
},
{
"login": "LakshyaPunyani-01",
"name": "LakshyaPunyani-01",
"avatar_url": "https://avatars.githubusercontent.com/u/103628913?v=4",
"profile": "https://github.com/LakshyaPunyani-01",
"contributions": [
"code"
]
},
{
"login": "jasonjyu",
"name": "jasonjyu",
"avatar_url": "https://avatars.githubusercontent.com/u/10333076?v=4",
"profile": "https://github.com/jasonjyu",
"contributions": [
"code"
]
},
{
"login": "jeffmorrison",
"name": "jeffmorrison",
"avatar_url": "https://avatars.githubusercontent.com/u/26047158?v=4",
"profile": "https://github.com/jeffmorrison",
"contributions": [
"code"
]
},
{
"login": "dmgodoy",
"name": "David M.",
"avatar_url": "https://avatars.githubusercontent.com/u/10840681?v=4",
"profile": "https://github.com/dmgodoy",
"contributions": [
"code"
]
},
{
"login": "apophizzz",
"name": "Patrick Kleindienst",
"avatar_url": "https://avatars.githubusercontent.com/u/12052783?v=4",
"profile": "https://github.com/apophizzz",
"contributions": [
"code"
]
},
{
"login": "proceane",
"name": "Juyeon",
"avatar_url": "https://avatars.githubusercontent.com/u/62143949?v=4",
"profile": "https://github.com/proceane",
"contributions": [
"translation"
]
},
{
"login": "mammadyahyayev",
"name": "Mammad Yahyayev",
"avatar_url": "https://avatars.githubusercontent.com/u/66476643?v=4",
"profile": "https://mammadyahya.vercel.app",
"contributions": [
"doc"
]
},
{
"login": "SalmaAzeem",
"name": "Salma",
"avatar_url": "https://avatars.githubusercontent.com/u/121863224?v=4",
"profile": "https://github.com/SalmaAzeem",
"contributions": [
"code"
]
},
{
"login": "CodeMaverick-143",
"name": "Arpit Sarang",
"avatar_url": "https://avatars.githubusercontent.com/u/182847716?v=4",
"profile": "https://codemaverick-143.github.io/My-Portfolio/",
"contributions": [
"code"
]
},
{
"login": "mayatarek",
"name": "Maya",
"avatar_url": "https://avatars.githubusercontent.com/u/111644421?v=4",
"profile": "https://github.com/mayatarek",
"contributions": [
"translation"
]
},
{
"login": "HabibaMekay",
"name": "HabibaMekay",
"avatar_url": "https://avatars.githubusercontent.com/u/133516736?v=4",
"profile": "https://github.com/HabibaMekay",
"contributions": [
"code"
]
},
{
"login": "Ahmed-Taha-981",
"name": "Ahmed-Taha-981",
"avatar_url": "https://avatars.githubusercontent.com/u/122402269?v=4",
"profile": "https://github.com/Ahmed-Taha-981",
"contributions": [
"code"
]
},
{
"login": "malak-elbanna",
"name": "Malak Elbanna",
"avatar_url": "https://avatars.githubusercontent.com/u/67643605?v=4",
"profile": "https://malakelbanna.netlify.app/",
"contributions": [
"code"
]
},
{
"login": "depthlending",
"name": "BiKangNing",
"avatar_url": "https://avatars.githubusercontent.com/u/164312726?v=4",
"profile": "https://github.com/depthlending",
"contributions": [
"doc"
]
},
{
"login": "TarunVishwakarma1",
"name": "Tarun Vishwakarma",
"avatar_url": "https://avatars.githubusercontent.com/u/138651451?v=4",
"profile": "https://github.com/TarunVishwakarma1",
"contributions": [
"code"
]
},
{
"login": "shahdhoss",
"name": "Shahd Hossam",
"avatar_url": "https://avatars.githubusercontent.com/u/132148556?v=4",
"profile": "https://github.com/shahdhoss",
"contributions": [
"code"
]
},
{
"login": "mehdirahimi",
"name": "Mehdi Rahimi",
"avatar_url": "https://avatars.githubusercontent.com/u/24210842?v=4",
"profile": "https://mehdirahimi.github.io",
"contributions": [
"code"
]
},
{
"login": "clintaire",
"name": "Clint Airé",
"avatar_url": "https://avatars.githubusercontent.com/u/111376518?v=4",
"profile": "https://github.com/clintaire",
"contributions": [
"code"
]
},
{
"login": "darkhyper24",
"name": "darkhyper24",
"avatar_url": "https://avatars.githubusercontent.com/u/132711528?v=4",
"profile": "https://github.com/darkhyper24",
"contributions": [
"code"
]
},
{
"login": "MohanedAtef238",
"name": "Mohaned Atef",
"avatar_url": "https://avatars.githubusercontent.com/u/105852138?v=4",
"profile": "https://github.com/MohanedAtef238",
"contributions": [
"code"
]
},
{
"login": "maximevtush",
"name": "Maxim Evtush",
"avatar_url": "https://avatars.githubusercontent.com/u/154841002?v=4",
"profile": "https://github.com/maximevtush",
"contributions": [
"code"
]
},
{
"login": "hvgh88",
"name": "Harshita Vidapanakal",
"avatar_url": "https://avatars.githubusercontent.com/u/65297242?v=4",
"profile": "https://github.com/hvgh88",
"contributions": [
"code"
]
},
{
"login": "smile-ab",
"name": "smile-ab",
"avatar_url": "https://avatars.githubusercontent.com/u/202159894?v=4",
"profile": "https://github.com/smile-ab",
"contributions": [
"translation",
"code"
]
},
{
"login": "Francisco-G-P",
"name": "Francisco-G-P",
"avatar_url": "https://avatars.githubusercontent.com/u/186766789?v=4",
"profile": "https://github.com/Francisco-G-P",
"contributions": [
"translation"
]
},
{
"login": "Duartegdm",
"name": "Gabriel Duarte",
"avatar_url": "https://avatars.githubusercontent.com/u/137895372?v=4",
"profile": "https://github.com/Duartegdm",
"contributions": [
"doc"
]
},
{
"login": "DenizAltunkapan",
"name": "Deniz Altunkapan",
"avatar_url": "https://avatars.githubusercontent.com/u/93663085?v=4",
"profile": "https://github.com/DenizAltunkapan",
"contributions": [
"translation"
]
},
{
"login": "johnklint81",
"name": "John Klint",
"avatar_url": "https://avatars.githubusercontent.com/u/70539458?v=4",
"profile": "https://github.com/johnklint81",
"contributions": [
"code"
]
},
{
"login": "sanurah",
"name": "Sanura Hettiarachchi",
"avatar_url": "https://avatars.githubusercontent.com/u/16178588?v=4",
"profile": "https://github.com/sanurah",
"contributions": [
"code"
]
},
{
"login": "2897robo",
"name": "Kim Gi Uk",
"avatar_url": "https://avatars.githubusercontent.com/u/31699375?v=4",
"profile": "https://github.com/2897robo",
"contributions": [
"code"
]
},
{
"login": "Suchismita-Deb",
"name": "Suchismita Deb",
"avatar_url": "https://avatars.githubusercontent.com/u/68535074?v=4",
"profile": "https://github.com/Suchismita-Deb",
"contributions": [
"code"
]
},
{
"login": "ssrijan-007-sys",
"name": "ssrijan-007-sys",
"avatar_url": "https://avatars.githubusercontent.com/u/137605821?v=4",
"profile": "https://github.com/ssrijan-007-sys",
"contributions": [
"code"
]
},
{
"login": "e5LA",
"name": "e5LA",
"avatar_url": "https://avatars.githubusercontent.com/u/208197507?v=4",
"profile": "https://github.com/e5LA",
"contributions": [
"code",
"doc"
]
},
{
"login": "maziyar-gerami",
"name": "Maziyar Gerami",
"avatar_url": "https://avatars.githubusercontent.com/u/122622721?v=4",
"profile": "http://maziyar-gerami.github.io/portfolio/",
"contributions": [
"translation"
]
},
{
"login": "yybmion",
"name": "yoobin_mion",
"avatar_url": "https://avatars.githubusercontent.com/u/113106136?v=4",
"profile": "https://github.com/yybmion",
"contributions": [
"code"
]
},
{
"login": "ronodhirSoumik",
"name": "Soumik Sarker",
"avatar_url": "https://avatars.githubusercontent.com/u/46843689?v=4",
"profile": "https://ronodhirsoumik.github.io",
"contributions": [
"doc"
]
},
{
"login": "naman-sriv",
"name": "Naman Srivastava",
"avatar_url": "https://avatars.githubusercontent.com/u/82610773?v=4",
"profile": "https://github.com/naman-sriv",
"contributions": [
"code"
]
},
{
"login": "letdtcode",
"name": "Thanh Nguyen Duc",
"avatar_url": "https://avatars.githubusercontent.com/u/92111552?v=4",
"profile": "https://github.com/letdtcode",
"contributions": [
"code"
]
},
{
"login": "skamble2",
"name": "Soham Kamble",
"avatar_url": "https://avatars.githubusercontent.com/u/121136639?v=4",
"profile": "https://github.com/skamble2",
"contributions": [
"code"
]
},
{
"login": "Olexandr88",
"name": "Olexandr88",
"avatar_url": "https://avatars.githubusercontent.com/u/93856062?v=4",
"profile": "https://github.com/Olexandr88",
"contributions": [
"doc"
]
}
],
"contributorsPerLine": 6,
"projectName": "java-design-patterns",
"projectOwner": "iluwatar",
"repoType": "github",
"repoHost": "https://github.com",
"skipCi": true,
"commitConvention": "angular",
"commitType": "docs"
}
================================================
FILE: .editorconfig
================================================
#
# This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under LGPL (see lgpl-3.0.txt).
#
# The MIT License
# Copyright © 2014-2022 Ilkka Seppälä
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = false
max_line_length = off
tab_width = 4
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = true
ij_smart_tabs = false
ij_visual_guides =
ij_wrap_on_typing = false
[*.java]
indent_size = 2
max_line_length = 100
ij_continuation_indent_size = 4
ij_java_align_consecutive_assignments = false
ij_java_align_consecutive_variable_declarations = false
ij_java_align_group_field_declarations = false
ij_java_align_multiline_annotation_parameters = false
ij_java_align_multiline_array_initializer_expression = false
ij_java_align_multiline_assignment = false
ij_java_align_multiline_binary_operation = false
ij_java_align_multiline_chained_methods = false
ij_java_align_multiline_deconstruction_list_components = true
ij_java_align_multiline_extends_list = false
ij_java_align_multiline_for = true
ij_java_align_multiline_method_parentheses = false
ij_java_align_multiline_parameters = true
ij_java_align_multiline_parameters_in_calls = false
ij_java_align_multiline_parenthesized_expression = false
ij_java_align_multiline_records = true
ij_java_align_multiline_resources = true
ij_java_align_multiline_ternary_operation = false
ij_java_align_multiline_text_blocks = false
ij_java_align_multiline_throws_list = false
ij_java_align_subsequent_simple_methods = false
ij_java_align_throws_keyword = false
ij_java_align_types_in_multi_catch = true
ij_java_annotation_parameter_wrap = off
ij_java_array_initializer_new_line_after_left_brace = false
ij_java_array_initializer_right_brace_on_new_line = false
ij_java_array_initializer_wrap = normal
ij_java_assert_statement_colon_on_next_line = false
ij_java_assert_statement_wrap = normal
ij_java_assignment_wrap = normal
ij_java_binary_operation_sign_on_next_line = false
ij_java_binary_operation_wrap = normal
ij_java_blank_lines_after_anonymous_class_header = 0
ij_java_blank_lines_after_class_header = 0
ij_java_blank_lines_after_imports = 1
ij_java_blank_lines_after_package = 1
ij_java_blank_lines_around_class = 1
ij_java_blank_lines_around_field = 0
ij_java_blank_lines_around_field_in_interface = 0
ij_java_blank_lines_around_initializer = 1
ij_java_blank_lines_around_method = 1
ij_java_blank_lines_around_method_in_interface = 1
ij_java_blank_lines_before_class_end = 0
ij_java_blank_lines_before_imports = 1
ij_java_blank_lines_before_method_body = 0
ij_java_blank_lines_before_package = 1
ij_java_block_brace_style = end_of_line
ij_java_block_comment_add_space = false
ij_java_block_comment_at_first_column = true
ij_java_builder_methods =
ij_java_call_parameters_new_line_after_left_paren = false
ij_java_call_parameters_right_paren_on_new_line = false
ij_java_call_parameters_wrap = normal
ij_java_case_statement_on_separate_line = true
ij_java_catch_on_new_line = false
ij_java_class_annotation_wrap = split_into_lines
ij_java_class_brace_style = end_of_line
ij_java_class_count_to_use_import_on_demand = 999
ij_java_class_names_in_javadoc = 1
ij_java_deconstruction_list_wrap = normal
ij_java_do_not_indent_top_level_class_members = false
ij_java_do_not_wrap_after_single_annotation = false
ij_java_do_not_wrap_after_single_annotation_in_parameter = false
ij_java_do_while_brace_force = always
ij_java_doc_add_blank_line_after_description = true
ij_java_doc_add_blank_line_after_param_comments = false
ij_java_doc_add_blank_line_after_return = false
ij_java_doc_add_p_tag_on_empty_lines = true
ij_java_doc_align_exception_comments = true
ij_java_doc_align_param_comments = true
ij_java_doc_do_not_wrap_if_one_line = false
ij_java_doc_enable_formatting = true
ij_java_doc_enable_leading_asterisks = true
ij_java_doc_indent_on_continuation = false
ij_java_doc_keep_empty_lines = true
ij_java_doc_keep_empty_parameter_tag = true
ij_java_doc_keep_empty_return_tag = true
ij_java_doc_keep_empty_throws_tag = true
ij_java_doc_keep_invalid_tags = true
ij_java_doc_param_description_on_new_line = false
ij_java_doc_preserve_line_breaks = false
ij_java_doc_use_throws_not_exception_tag = true
ij_java_else_on_new_line = false
ij_java_entity_dd_prefix =
ij_java_entity_dd_suffix = EJB
ij_java_entity_eb_prefix =
ij_java_entity_eb_suffix = Bean
ij_java_entity_hi_prefix =
ij_java_entity_hi_suffix = Home
ij_java_entity_lhi_prefix = Local
ij_java_entity_lhi_suffix = Home
ij_java_entity_li_prefix = Local
ij_java_entity_li_suffix =
ij_java_entity_pk_class = java.lang.String
ij_java_entity_ri_prefix =
ij_java_entity_ri_suffix =
ij_java_entity_vo_prefix =
ij_java_entity_vo_suffix = VO
ij_java_enum_constants_wrap = normal
ij_java_extends_keyword_wrap = normal
ij_java_extends_list_wrap = normal
ij_java_field_annotation_wrap = split_into_lines
ij_java_field_name_prefix =
ij_java_field_name_suffix =
ij_java_filter_class_prefix =
ij_java_filter_class_suffix =
ij_java_filter_dd_prefix =
ij_java_filter_dd_suffix =
ij_java_finally_on_new_line = false
ij_java_for_brace_force = always
ij_java_for_statement_new_line_after_left_paren = false
ij_java_for_statement_right_paren_on_new_line = false
ij_java_for_statement_wrap = normal
ij_java_generate_final_locals = false
ij_java_generate_final_parameters = false
ij_java_if_brace_force = always
ij_java_imports_layout = $*,|,*
ij_java_indent_case_from_switch = true
ij_java_insert_inner_class_imports = false
ij_java_insert_override_annotation = true
ij_java_keep_blank_lines_before_right_brace = 2
ij_java_keep_blank_lines_between_package_declaration_and_header = 2
ij_java_keep_blank_lines_in_code = 2
ij_java_keep_blank_lines_in_declarations = 2
ij_java_keep_builder_methods_indents = false
ij_java_keep_control_statement_in_one_line = true
ij_java_keep_first_column_comment = true
ij_java_keep_indents_on_empty_lines = false
ij_java_keep_line_breaks = true
ij_java_keep_multiple_expressions_in_one_line = false
ij_java_keep_simple_blocks_in_one_line = false
ij_java_keep_simple_classes_in_one_line = false
ij_java_keep_simple_lambdas_in_one_line = false
ij_java_keep_simple_methods_in_one_line = false
ij_java_label_indent_absolute = false
ij_java_label_indent_size = 0
ij_java_lambda_brace_style = end_of_line
ij_java_layout_static_imports_separately = true
ij_java_line_comment_add_space = false
ij_java_line_comment_add_space_on_reformat = false
ij_java_line_comment_at_first_column = true
ij_java_listener_class_prefix =
ij_java_listener_class_suffix =
ij_java_local_variable_name_prefix =
ij_java_local_variable_name_suffix =
ij_java_message_dd_prefix =
ij_java_message_dd_suffix = EJB
ij_java_message_eb_prefix =
ij_java_message_eb_suffix = Bean
ij_java_method_annotation_wrap = split_into_lines
ij_java_method_brace_style = end_of_line
ij_java_method_call_chain_wrap = normal
ij_java_method_parameters_new_line_after_left_paren = false
ij_java_method_parameters_right_paren_on_new_line = false
ij_java_method_parameters_wrap = normal
ij_java_modifier_list_wrap = false
ij_java_multi_catch_types_wrap = normal
ij_java_names_count_to_use_import_on_demand = 999
ij_java_new_line_after_lparen_in_annotation = false
ij_java_new_line_after_lparen_in_deconstruction_pattern = true
ij_java_new_line_after_lparen_in_record_header = false
ij_java_packages_to_use_import_on_demand =
ij_java_parameter_annotation_wrap = normal
ij_java_parameter_name_prefix =
ij_java_parameter_name_suffix =
ij_java_parentheses_expression_new_line_after_left_paren = false
ij_java_parentheses_expression_right_paren_on_new_line = false
ij_java_place_assignment_sign_on_next_line = false
ij_java_prefer_longer_names = true
ij_java_prefer_parameters_wrap = false
ij_java_record_components_wrap = normal
ij_java_repeat_annotations =
ij_java_repeat_synchronized = true
ij_java_replace_instanceof_and_cast = false
ij_java_replace_null_check = true
ij_java_replace_sum_lambda_with_method_ref = true
ij_java_resource_list_new_line_after_left_paren = false
ij_java_resource_list_right_paren_on_new_line = false
ij_java_resource_list_wrap = normal
ij_java_rparen_on_new_line_in_annotation = false
ij_java_rparen_on_new_line_in_deconstruction_pattern = true
ij_java_rparen_on_new_line_in_record_header = false
ij_java_servlet_class_prefix =
ij_java_servlet_class_suffix =
ij_java_servlet_dd_prefix =
ij_java_servlet_dd_suffix =
ij_java_session_dd_prefix =
ij_java_session_dd_suffix = EJB
ij_java_session_eb_prefix =
ij_java_session_eb_suffix = Bean
ij_java_session_hi_prefix =
ij_java_session_hi_suffix = Home
ij_java_session_lhi_prefix = Local
ij_java_session_lhi_suffix = Home
ij_java_session_li_prefix = Local
ij_java_session_li_suffix =
ij_java_session_ri_prefix =
ij_java_session_ri_suffix =
ij_java_session_si_prefix =
ij_java_session_si_suffix = Service
ij_java_space_after_closing_angle_bracket_in_type_argument = false
ij_java_space_after_colon = true
ij_java_space_after_comma = true
ij_java_space_after_comma_in_type_arguments = true
ij_java_space_after_for_semicolon = true
ij_java_space_after_quest = true
ij_java_space_after_type_cast = true
ij_java_space_before_annotation_array_initializer_left_brace = false
ij_java_space_before_annotation_parameter_list = false
ij_java_space_before_array_initializer_left_brace = true
ij_java_space_before_catch_keyword = true
ij_java_space_before_catch_left_brace = true
ij_java_space_before_catch_parentheses = true
ij_java_space_before_class_left_brace = true
ij_java_space_before_colon = true
ij_java_space_before_colon_in_foreach = true
ij_java_space_before_comma = false
ij_java_space_before_deconstruction_list = false
ij_java_space_before_do_left_brace = true
ij_java_space_before_else_keyword = true
ij_java_space_before_else_left_brace = true
ij_java_space_before_finally_keyword = true
ij_java_space_before_finally_left_brace = true
ij_java_space_before_for_left_brace = true
ij_java_space_before_for_parentheses = true
ij_java_space_before_for_semicolon = false
ij_java_space_before_if_left_brace = true
ij_java_space_before_if_parentheses = true
ij_java_space_before_method_call_parentheses = false
ij_java_space_before_method_left_brace = true
ij_java_space_before_method_parentheses = false
ij_java_space_before_opening_angle_bracket_in_type_parameter = false
ij_java_space_before_quest = true
ij_java_space_before_switch_left_brace = true
ij_java_space_before_switch_parentheses = true
ij_java_space_before_synchronized_left_brace = true
ij_java_space_before_synchronized_parentheses = true
ij_java_space_before_try_left_brace = true
ij_java_space_before_try_parentheses = true
ij_java_space_before_type_parameter_list = false
ij_java_space_before_while_keyword = true
ij_java_space_before_while_left_brace = true
ij_java_space_before_while_parentheses = true
ij_java_space_inside_one_line_enum_braces = false
ij_java_space_within_empty_array_initializer_braces = false
ij_java_space_within_empty_method_call_parentheses = false
ij_java_space_within_empty_method_parentheses = false
ij_java_spaces_around_additive_operators = true
ij_java_spaces_around_annotation_eq = true
ij_java_spaces_around_assignment_operators = true
ij_java_spaces_around_bitwise_operators = true
ij_java_spaces_around_equality_operators = true
ij_java_spaces_around_lambda_arrow = true
ij_java_spaces_around_logical_operators = true
ij_java_spaces_around_method_ref_dbl_colon = false
ij_java_spaces_around_multiplicative_operators = true
ij_java_spaces_around_relational_operators = true
ij_java_spaces_around_shift_operators = true
ij_java_spaces_around_type_bounds_in_type_parameters = true
ij_java_spaces_around_unary_operator = false
ij_java_spaces_within_angle_brackets = false
ij_java_spaces_within_annotation_parentheses = false
ij_java_spaces_within_array_initializer_braces = false
ij_java_spaces_within_braces = false
ij_java_spaces_within_brackets = false
ij_java_spaces_within_cast_parentheses = false
ij_java_spaces_within_catch_parentheses = false
ij_java_spaces_within_deconstruction_list = false
ij_java_spaces_within_for_parentheses = false
ij_java_spaces_within_if_parentheses = false
ij_java_spaces_within_method_call_parentheses = false
ij_java_spaces_within_method_parentheses = false
ij_java_spaces_within_parentheses = false
ij_java_spaces_within_record_header = false
ij_java_spaces_within_switch_parentheses = false
ij_java_spaces_within_synchronized_parentheses = false
ij_java_spaces_within_try_parentheses = false
ij_java_spaces_within_while_parentheses = false
ij_java_special_else_if_treatment = true
ij_java_static_field_name_prefix =
ij_java_static_field_name_suffix =
ij_java_subclass_name_prefix =
ij_java_subclass_name_suffix = Impl
ij_java_ternary_operation_signs_on_next_line = false
ij_java_ternary_operation_wrap = normal
ij_java_test_name_prefix =
ij_java_test_name_suffix = Test
ij_java_throws_keyword_wrap = normal
ij_java_throws_list_wrap = normal
ij_java_use_external_annotations = false
ij_java_use_fq_class_names = false
ij_java_use_relative_indents = false
ij_java_use_single_class_imports = true
ij_java_variable_annotation_wrap = normal
ij_java_visibility = public
ij_java_while_brace_force = always
ij_java_while_on_new_line = false
ij_java_wrap_comments = false
ij_java_wrap_first_method_in_call_chain = false
ij_java_wrap_long_lines = false
[{*.markdown,*.md}]
ij_markdown_force_one_space_after_blockquote_symbol = true
ij_markdown_force_one_space_after_header_symbol = true
ij_markdown_force_one_space_after_list_bullet = true
ij_markdown_force_one_space_between_words = true
ij_markdown_format_tables = true
ij_markdown_insert_quote_arrows_on_wrap = true
ij_markdown_keep_indents_on_empty_lines = false
ij_markdown_keep_line_breaks_inside_text_blocks = true
ij_markdown_max_line_length = off
ij_markdown_max_lines_around_block_elements = 1
ij_markdown_max_lines_around_header = 1
ij_markdown_max_lines_between_paragraphs = 1
ij_markdown_min_lines_around_block_elements = 1
ij_markdown_min_lines_around_header = 1
ij_markdown_min_lines_between_paragraphs = 1
ij_markdown_wrap_text_if_long = true
ij_markdown_wrap_text_inside_blockquotes = true
================================================
FILE: .github/FUNDING.yml
================================================
github: [iluwatar]
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "maven" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/maven-ci.yml
================================================
name: Java CI
on:
push:
branches: [ master ]
jobs:
build-and-analyze:
name: Build and Run Sonar analysis on JDK 21
runs-on: ubuntu-22.04
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
# Disabling shallow clone for improving relevancy of SonarQube reporting
fetch-depth: 0
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
- name: Cache local Maven repository
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
# Cache Sonar packages which are used to run analysis and collect metrics
- name: Cache SonarCloud packages
uses: actions/cache@v4
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
# Some tests need screen access
- name: Install xvfb
run: sudo apt-get install -y xvfb
- name: Build with Maven and run SonarQube analysis
run: xvfb-run ./mvnw clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
env:
# These two env variables are needed for sonar analysis
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
================================================
FILE: .github/workflows/maven-pr-builder.yml
================================================
name: Java PR Builder
on:
pull_request_target:
branches: [ master ]
types: [ opened, reopened, synchronize ]
permissions:
contents: read
jobs:
build-and-analyze:
name: Build on JDK 21
runs-on: ubuntu-22.04
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
- name: Cache local Maven repository
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
# Cache Sonar packages which are used to run analysis and collect metrics
- name: Cache SonarCloud packages
uses: actions/cache@v4
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
# Some tests need screen access
- name: Install xvfb
run: sudo apt-get install -y xvfb
- name: Build with Maven and run SonarQube analysis
env:
# Intermediate variable
HEAD_REF: ${{ github.head_ref }}
# These two env variables are needed for sonar analysis
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: xvfb-run ./mvnw clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=iluwatar -Dsonar.projectKey=iluwatar_java-design-patterns -Dsonar.pullrequest.branch=$HEAD_REF -Dsonar.pullrequest.base=${{ github.base_ref }} -Dsonar.pullrequest.key=${{ github.event.pull_request.number }}
================================================
FILE: .github/workflows/presubmit.yml
================================================
name: Presubmit.ai
permissions:
contents: read
pull-requests: write
issues: write
on:
pull_request_target:
types: [opened, synchronize]
pull_request_review_comment:
types: [created]
jobs:
review:
runs-on: ubuntu-latest
steps:
- name: Check required secrets
run: |
if [ -z "${{ secrets.LLM_API_KEY }}" ]; then
echo "Error: LLM_API_KEY secret is not configured"
exit 1
fi
- uses: presubmit/ai-reviewer@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_MODEL: "gpt-5-nano"
================================================
FILE: .github/workflows/stale.yml
================================================
name: 'Comment on stale issues and PRs'
on:
schedule:
- cron: '30 1 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: 'This issue is stale because it has been open 60 days with no activity.'
stale-pr-message: 'This PR is stale because it has been open 60 days with no activity.'
close-issue-message: 'This issue was closed because it has been stalled for too long with no activity.'
close-pr-message: 'This PR was closed because it has been stalled for too long with no activity.'
days-before-issue-stale: 60
days-before-pr-stale: 60
days-before-issue-close: -1
days-before-pr-close: -1
exempt-issue-labels: 'info: help wanted'
================================================
FILE: .gitignore
================================================
################## Eclipse ######################
target
.metadata
.settings
.classpath
.project
*.class
tmp/
*.tmp
*.bak
*~.nib
local.properties
.loadpath
.recommenders
.DS_Store
####### Java annotation processor (APT) ########
.factorypath
################ Package Files ##################
*.jar
*.war
*.ear
*.swp
datanucleus.log
/bin/
*.log
event-sourcing/Journal.json
################## Checkstyle ###################
.checkstyle
##################### STS #######################
.apt_generated
.springBeans
.sts4-cache
################# IntelliJ IDEA #################
.idea
*.iws
*.iml
*.ipr
################### NetBeans ####################
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
#################### VS Code ####################
.vscode/
#################### Java Design Patterns #######
etc/Java Design Patterns.urm.puml
serialized-entity/output.txt
fish1.out
fish2.out
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
================================================
FILE: CONTRIBUTING.MD
================================================
The project guidelines can be found in [Java Design Patterns developer wiki](https://github.com/iluwatar/java-design-patterns/wiki).
A good place to start is: https://github.com/iluwatar/java-design-patterns/wiki/01.-How-to-contribute
================================================
FILE: LICENSE.md
================================================
The MIT License (MIT)
Copyright � 2014-2024 Ilkka Seppälä
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Module Model-view-viewmodel is using ZK framework
ZK framework is licensed under LGPL and the license can be found at lgpl-3.0.txt
================================================
FILE: PULL_REQUEST_TEMPLATE.md
================================================
# Pull Request Template
## What does this PR do?
================================================
FILE: README.md
================================================
# Design Patterns Implemented in Java
[](https://github.com/iluwatar/java-design-patterns/actions/workflows/maven-ci.yml)
[](https://raw.githubusercontent.com/iluwatar/java-design-patterns/master/LICENSE.md)
[](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
[](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
[](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](#contributors-)
Read in different language : [**zh**](localization/zh/README.md), [**ko**](localization/ko/README.md), [**fr**](localization/fr/README.md), [**tr**](localization/tr/README.md), [**ar**](localization/ar/README.md), [**es**](localization/es/README.md), [**pt**](localization/pt/README.md), [**id**](localization/id/README.md), [**ru**](localization/ru/README.md), [**de**](localization/de/README.md), [**ja**](localization/ja/README.md), [**vi**](localization/vi/README.md), [**bn**](localization/bn/README.md), [**np**](localization/ne/README.md), [**it**](localization/it/README.md), [**da**](localization/da/README.md)
# 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 helps 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 of 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](https://java-design-patterns.com/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](https://java-design-patterns.com/patterns/) by any of the following approaches:
- Search for a specific pattern by name. Can't find one? Please report a new pattern [here](https://github.com/iluwatar/java-design-patterns/issues).
- 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 while developing them.
# How to Contribute
If you are willing to contribute to the project you will find the relevant information in our [developer wiki](https://github.com/iluwatar/java-design-patterns/wiki). We will help you and answer your questions in the [Gitter chatroom](https://gitter.im/iluwatar/java-design-patterns).
# The Book
The design patterns are now available as an e-book. Find out more about "Open Source Java Design Patterns" here: https://payhip.com/b/bNQFX
The project contributors can get the book for free. Contact the maintainer via [Gitter chatroom](https://gitter.im/iluwatar/java-design-patterns) or email (iluwatar (at) gmail (dot) com ). Send a message that contains your email address, Github username, and a link to an accepted pull request.
# License
This project is licensed under the terms of the MIT license.
# Contributors