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