8000 java-design-patterns/combinator at master · tyb/java-design-patterns · GitHub
[go: up one dir, main page]

Skip to content
{"payload":{"allShortcutsEnabled":false,"path":"combinator","repo":{"id":502410387,"defaultBranch":"master","name":"java-design-patterns","ownerLogin":"tyb","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2022-06-11T17:12:44.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/555358?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":null,"refInfo":{"name":"master","listCacheKey":"v0:1654967566.250976","canEdit":false,"refType":"branch","currentOid":"4cdc309e65f3a1eae597ecb3b22e5ad6b7abbd41"},"tree":{"items":[{"name":"etc","path":"combinator/etc","contentType":"directory"},{"name":"src","path":"combinator/src","contentType":"directory"},{"name":"README.md","path":"combinator/README.md","contentType":"file"},{"name":"pom.xml","path":"combinator/pom.xml","contentType":"file"}],"templateDirectorySuggestionUrl":null,"readme":{"displayName":"README.md","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n \u003cthead\u003e\n \u003ctr\u003e\n \u003cth\u003elayout\u003c/th\u003e\n \u003cth\u003etitle\u003c/th\u003e\n \u003cth\u003efolder\u003c/th\u003e\n \u003cth\u003epermalink\u003c/th\u003e\n \u003cth\u003ecategories\u003c/th\u003e\n \u003cth\u003elanguage\u003c/th\u003e\n \u003cth\u003etags\u003c/th\u003e\n \u003c/tr\u003e\n \u003c/thead\u003e\n \u003ctbody\u003e\n \u003ctr\u003e\n \u003ctd\u003e\u003cdiv dir=\"auto\"\u003epattern\u003c/div\u003e\u003c/td\u003e\n \u003ctd\u003e\u003cdiv dir=\"auto\"\u003eCombinator\u003c/div\u003e\u003c/td\u003e\n \u003ctd\u003e\u003cdiv dir=\"auto\"\u003ecombinator\u003c/div\u003e\u003c/td\u003e\n \u003ctd\u003e\u003cdiv dir=\"auto\"\u003e/patterns/combinator/\u003c/div\u003e\u003c/td\u003e\n \u003ctd\u003e\u003cdiv dir=\"auto\"\u003eIdiom\u003c/div\u003e\u003c/td\u003e\n \u003ctd\u003e\u003cdiv dir=\"auto\"\u003een\u003c/div\u003e\u003c/td\u003e\n \u003ctd\u003e\u003cdiv dir=\"auto\"\u003e\u003ctable\u003e\n \u003ctbody\u003e\n \u003ctr\u003e\n \u003ctd\u003e\u003cdiv dir=\"auto\"\u003eReactive\u003c/div\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAlso known as\u003c/h2\u003e\u003ca id=\"user-content-also-known-as\" class=\"anchor\" aria-label=\"Permalink: Also known as\" href=\"#also-known-as\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eComposition pattern\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIntent\u003c/h2\u003e\u003ca id=\"user-content-intent\" class=\"anchor\" aria-label=\"Permalink: Intent\" href=\"#intent\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe functional pattern representing a style of organizing libraries centered around the idea of combining functions.\u003cbr\u003e\nPutting it simply, there is some type T, some functions for constructing \"primitive\" values of type T,\nand some \"combinators\" which can combine values of type T in various ways to build up more complex values of type T.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eClass diagram\u003c/h2\u003e\u003ca id=\"user-content-class-diagram\" class=\"anchor\" aria-label=\"Permalink: Class diagram\" href=\"#class-diagram\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/tyb/java-design-patterns/blob/master/combinator/etc/combinator.urm.png\"\u003e\u003cimg src=\"/tyb/java-design-patterns/raw/master/combinator/etc/combinator.urm.png\" alt=\"alt text\" title=\"Combinator class diagram\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eApplicability\u003c/h2\u003e\u003ca id=\"user-content-applicability\" class=\"anchor\" aria-label=\"Permalink: Applicability\" href=\"#applicability\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eUse the combinator pattern when:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eYou are able to create a more complex value from more plain values but having the same type(a combination of them)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eReal world examples\u003c/h2\u003e\u003ca id=\"user-content-real-world-examples\" class=\"anchor\" aria-label=\"Permalink: Real world examples\" href=\"#real-world-examples\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ejava.util.function.Function#compose\u003c/li\u003e\n\u003cli\u003ejava.util.function.Function#andThen\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCredits\u003c/h2\u003e\u003ca id=\"user-content-credits\" class=\"anchor\" aria-label=\"Permalink: Credits\" href=\"#credits\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://gtrefs.github.io/code/combinator-pattern/\" rel=\"nofollow\"\u003eExample for java\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://wiki.haskell.org/Combinator_pattern\" rel=\"nofollow\"\u003eCombinator pattern\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://wiki.haskell.org/Combinatory_logic\" rel=\"nofollow\"\u003eCombinatory logic\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/article\u003e","errorMessage":null,"headerInfo":{"toc":[{"level":2,"text":"Also known as","anchor":"also-known-as","htmlText":"Also known as"},{"level":2,"text":"Intent","anchor":"intent","htmlText":"Intent"},{"level":2,"text":"Class diagram","anchor":"class-diagram","htmlText":"Class diagram"},{"level":2,"text":"Applicability","anchor":"applicability","htmlText":"Applicability"},{"level":2,"text":"Real world examples","anchor":"real-world-examples","htmlText":"Real world examples"},{"level":2,"text":"Credits","anchor":"credits","htmlText":"Credits"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftyb%2Fjava-design-patterns%2Ftree%2Fmaster%2Fcombinator"}},"totalCount":4,"showBranchInfobar":true},"fileTree":{"":{"items":[{"name":".circleci","path":".circleci","contentType":"directory"},{"name":".github","path":".github","contentType":"directory"},{"name":".mvn","path":".mvn","contentType":"directory"},{"name":"abstract-document","path":"abstract-document","contentType":"directory"},{"name":"abstract-factory","path":"abstract-factory","contentType":"directory"},{"name":"active-object","path":"active-object","contentType":"directory"},{"name":"acyclic-visitor","path":"acyclic-visitor","contentType":"directory"},{"name":"adapter","path":"adapter","contentType":"directory"},{"name":"aggregator-microservices","path":"aggregator-microservices","contentType":"directory"},{"name":"ambassador","path":"ambassador","contentType":"directory"},{"name":"api-gateway","path":"api-gateway","contentType":"directory"},{"name":"arrange-act-assert","path":"arrange-act-assert","contentType":"directory"},{"name":"async-method-invocation","path":"async-method-invocation","contentType":"directory"},{"name":"balking","path":"balking","contentType":"directory"},{"name":"bridge","path":"bridge","contentType":"directory"},{"name":"builder","path":"builder","contentType":"directory"},{"name":"business-delegate","path":"business-delegate","contentType":"directory"},{"name":"bytecode","path":"bytecode","contentType":"directory"},{"name":"caching","path":"caching","contentType":"directory"},{"name":"callback","path":"callback","contentType":"directory"},{"name":"chain-of-responsibility","path":"chain-of-responsibility","contentType":"directory"},{"name":"circuit-breaker","path":"circuit-breaker","contentType":"directory"},{"name":"cloud-claim-check-pattern","path":"cloud-claim-check-pattern","contentType":"directory"},{"name":"cloud-static-content-hosting","path":"cloud-static-content-hosting","contentType":"directory"},{"name":"collection-pipeline","path":"collection-pipeline","contentType":"directory"},{"name":"combinator","path":"combinator","contentType":"directory"},{"name":"command","path":"command","contentType":"directory"},{"name":"commander","path":"commander","contentType":"directory"},{"name":"composite-entity","path":"composite-entity","contentType":"directory"},{"name":"composite-view","path":"composite-view","contentType":"directory"},{"name":"composite","path":"composite","contentType":"directory"},{"name":"converter","path":"converter","contentType":"directory"},{"name":"cqrs","path":"cqrs","contentType":"directory"},{"name":"dao","path":"dao","contentType":"directory"},{"name":"data-bus","path":"data-bus","contentType":"directory"},{"name":"data-locality","path":"data-locality","contentType":"directory"},{"name":"data-mapper","path":"data-mapper","contentType":"directory"},{"name":"data-transfer-object","path":"data-transfer-object","contentType":"directory"},{"name":"decorator","path":"decorator","contentType":"directory"},{"name":"delegation","path":"delegation","contentType":"directory"},{"name":"dependency-injection","path":"dependency-injection","contentType":"directory"},{"name":"dirty-flag","path":"dirty-flag","contentType":"directory"},{"name":"domain-model","path":"domain-model","contentType":"directory"},{"name":"double-buffer","path":"double-buffer","contentType":"directory"},{"name":"double-checked-locking","path":"double-checked-locking","contentType":"directory"},{"name":"double-dispatch","path":"double-dispatch","contentType":"directory"},{"name":"eip-aggregator","path":"eip-aggregator","contentType":"directory"},{"name":"eip-message-channel","path":"eip-message-channel","contentType":"directory"},{"name":"eip-publish-subscribe","path":"eip-publish-subscribe","contentType":"directory"},{"name":"eip-splitter","path":"eip-splitter","contentType":"directory"},{"name":"eip-wire-tap","path":"eip-wire-tap","contentType":"directory"},{"name":"etc","path":"etc","contentType":"directory"},{"name":"event-aggregator","path":"event-aggregator","contentType":"directory"},{"name":"event-asynchronous","path":"event-asynchronous","contentType":"directory"},{"name":"event-driven-architecture","path":"event-driven-architecture","contentType":"directory"},{"name":"event-queue","path":"event-queue","contentType":"directory"},{"name":"event-sourcing","path":"event-sourcing","contentType":"directory"},{"name":"execute-around","path":"execute-around","contentType":"directory"},{"name":"extension-objects","path":"extension-objects","contentType":"directory"},{"name":"facade","path":"facade","contentType":"directory"},{"name":"factory-kit","path":"factory-kit","contentType":"directory"},{"name":"factory-method","path":"factory-method","contentType":"directory"},{"name":"factory","path":"factory","contentType":"directory"},{"name":"fanout-fanin","path":"fanout-fanin","contentType":"directory"},{"name":"feature-toggle","path":"feature-toggle","contentType":"directory"},{"name":"filterer","path":"filterer","contentType":"directory"},{"name":"fluentinterface","path":"fluentinterface","contentType":"directory"},{"name":"flux","path":"flux","contentType":"directory"},{"name":"flyweight","path":"flyweight","contentType":"directory"},{"name":"front-controller","path":"front-controller","contentType":"directory"},{"name":"game-loop","path":"game-loop","contentType":"directory"},{"name":"guarded-suspension","path":"guarded-suspension","contentType":"directory"},{"name":"half-sync-half-async","path":"half-sync-half-async","contentType":"directory"},{"name":"hexagonal","path":"hexagonal","contentType":"directory"},{"name":"intercepting-filter","path":"intercepting-filter","contentType":"directory"},{"name":"interpreter","path":"interpreter","contentType":"directory"},{"name":"iterator","path":"iterator","contentType":"directory"},{"name":"layers","path":"layers","contentType":"directory"},{"name":"lazy-loading","path":"lazy-loading","contentType":"directory"},{"name":"leader-election","path":"leader-election","contentType":"directory"},{"name":"leader-followers","path":"leader-followers","contentType":"directory"},{"name":"localization","path":"localization","contentType":"directory"},{"name":"lockable-object","path":"lockable-object","contentType":"directory"},{"name":"marker","path":"marker","contentType":"directory"},{"name":"master-worker-pattern","path":"master-worker-pattern","contentType":"directory"},{"name":"mediator","path":"mediator","contentType":"directory"},{"name":"memento","path":"memento","contentType":"directory"},{"name":"metadata-mapping","path":"metadata-mapping","contentType":"directory"},{"name":"model-view-controller","path":"model-view-controller","contentType":"directory"},{"name":"model-view-presenter","path":"model-view-presenter","contentType":"directory"},{"name":"model-view-viewmodel","path":"model-view-viewmodel","contentType":"directory"},{"name":"module","path":"module","contentType":"directory"},{"name":"monad","path":"monad","contentType":"directory"},{"name":"monitor","path":"monitor","contentType":"directory"},{"name":"monostate","path":"monostate","contentType":"directory"},{"name":"multiton","path":"multiton","contentType":"directory"},{"name":"mute-idiom","path":"mute-idiom","contentType":"directory"},{"name":"naked-objects","path":"naked-objects","contentType":"directory"},{"name":"null-object","path":"null-object","contentType":"directory"},{"name":"object-mother","path":"object-mother","contentType":"directory"},{"name":"object-pool","path":"object-pool","contentType":"directory"},{"name":"observer","path":"observer","contentType":"directory"},{"name":"page-object","path":"page-object","contentType":"directory"},{"name":"parameter-object","path":"parameter-object","contentType":"directory"},{"name":"partial-response","path":"partial-response","contentType":"directory"},{"name":"pipeline","path":"pipeline","contentType":"directory"},{"name":"poison-pill","path":"poison-pill","contentType":"directory"},{"name":"presentation","path":"presentation","contentType":"directory"},{"name":"priority-queue","path":"priority-queue","contentType":"directory"},{"name":"private-class-data","path":"private-class-data","contentType":"directory"},{"name":"producer-consumer","path":"producer-consumer","contentType":"directory"},{"name":"promise","path":"promise","contentType":"directory"},{"name":"property","path":"property","contentType":"directory"},{"name":"prototype","path":"prototype","contentType":"directory"},{"name":"proxy","path":"proxy","contentType":"directory"},{"name":"queue-load-leveling","path":"queue-load-leveling","contentType":"directory"},{"name":"reactor","path":"reactor","contentType":"directory"},{"name":"reader-writer-lock","path":"reader-writer-lock","contentType":"directory"},{"name":"registry","path":"registry","contentType":"directory"},{"name":"repository","path":"repository","contentType":"directory"},{"name":"resource-acquisition-is-initialization","path":"resource-acquisition-is-initialization","contentType":"directory"},{"name":"retry","path":"retry","contentType":"directory"},{"name":"role-object","path":"role-object","contentType":"directory"},{"name":"saga","path":"saga","contentType":"directory"},{"name":"separated-interface","path":"separated-interface","contentType":"directory"},{"name":"servant","path":"servant","contentType":"directory"},{"name":"serverless","path":"serverless","contentType":"directory"},{"name":"service-layer","path":"service-layer","contentType":"directory"},{"name":"service-locator","path":"service-locator","contentType":"directory"},{"name":"sharding","path":"sharding","contentType":"directory"},{"name":"singleton","path":"singleton","contentType":"directory"},{"name":"spatial-partition","path":"spatial-partition","contentType":"directory"},{"name":"special-case","path":"special-case","contentType":"directory"},{"name":"specification","path":"specification","contentType":"directory"},{"name":"state","path":"state","contentType":"directory"},{"name":"step-builder","path":"step-builder","contentType":"directory"},{"name":"strangler","path":"strangler","contentType":"directory"},{"name":"strategy","path":"strategy","contentType":"directory"},{"name":"subclass-sandbox","path":"subclass-sandbox","contentType":"directory"},{"name":"table-module","path":"table-module","contentType":"directory"},{"name":"template-method","path":"template-method","contentType":"directory"},{"name":"thread-pool","path":"thread-pool","contentType":"directory"},{"name":"throttling","path":"throttling","contentType":"directory"},{"name":"tls","path":"tls","contentType":"directory"},{"name":"tolerant-reader","path":"tolerant-reader","contentType":"directory"},{"name":"trampoline","path":"trampoline","contentType":"directory"},{"name":"transaction-script","path":"transaction-script","contentType":"directory"},{"name":"twin","path":"twin","contentType":"directory"},{"name":"typeobjectpattern","path":"typeobjectpattern","contentType":"directory"},{"name":"unit-of-work","path":"unit-of-work","contentType":"directory"},{"name":"update-method","path":"update-method","contentType":"directory"},{"name":"value-object","path":"value-object","contentType":"directory"},{"name":"version-number","path":"version-number","contentType":"directory"},{"name":"visitor","path":"visitor","contentType":"directory"},{"name":".all-contributorsrc","path":".all-contributorsrc","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"CONTRIBUTING.MD","path":"CONTRIBUTING.MD","contentType":"file"},{"name":"LICENSE.md","path":"LICENSE.md","contentType":"file"},{"name":"PULL_REQUEST_TEMPLATE.md","path":"PULL_REQUEST_TEMPLATE.md","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"checkstyle-suppressions.xml","path":"checkstyle-suppressions.xml","contentType":"file"},{"name":"gpl-3.0.txt","path":"gpl-3.0.txt","contentType":"file"},{"name":"lgpl-3.0.txt","path":"lgpl-3.0.txt","contentType":"file"},{"name":"license-plugin-header-style.xml","path":"license-plugin-header-style.xml","contentType":"file"},{"name":"lombok.config","path":"lombok.config","contentType":"file"},{"name":"mvnw","path":"mvnw","contentType":"file"},{"name":"mvnw.cmd","path":"mvnw.cmd","contentType":"file"},{"name":"pom.xml","path":"pom.xml","contentType":"file"}],"totalCount":168}},"fileTreeProcessingTime":14.951799999999999,"foldersToFetch":[],"treeExpanded":true,"symbolsExpanded":false,"csrf_tokens":{"/tyb/java-design-patterns/branches":{"post":"jrH8Ywv-xAOZV_OvLh0TOpuxJVBrY9OxP9GqdDRUY4YGRT6Om5QCS8LhSdivEC_zWjUyVgvWJuwtvcKd5fw08A"},"/tyb/java-design-patterns/branches/fetch_and_merge/master":{"post":"oX7STl520GJFiOMKIP5yu7EKPNoAQew8WyDDBsZxIQVZBGtYj0n6DpRz7tU_UH_I0PdsOYJjmelNuNYpUffqIg"},"/tyb/java-design-patterns/branches/fetch_and_merge/master?discard_changes=true":{"post":"rcBledfu2HyE7R24OxlWLkcRPaUuzCHjZa64awpfoa1VutxvBtHyEFUWEGckt1tdJuxtRqzuVDZzNq1Endlqig"}}},"title":"java-design-patterns/combinator at master · tyb/java-design-patterns","appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-263cab1760dd.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-b84e9496fc59.js","githubDevUrl":null,"enabled_features":{"code_nav_ui_events":false,"react_blob_overlay":false,"accessible_code_button":true}}}
0