From 15eb49e5743a80d588f8b562f2a23fd7151d4f47 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2020 08:07:20 +0000 Subject: [PATCH 01/13] docs: update README.md [skip ci] --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 401a92103..13a32d769 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Sonarcloud Status](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=alert_status)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns) -[![All Contributors](https://img.shields.io/badge/all_contributors-115-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-116-orange.svg?style=flat-square)](#contributors-) # Introduction @@ -240,6 +240,7 @@ This project is licensed under the terms of the MIT license.
Lars Kappert

đź–‹
Mike Liu

🌍
Matt Dolan

đź’» +
Manan

đź‘€ From 0a2c87d49adbde9b96866a93f1886ff5764ce753 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2020 08:07:21 +0000 Subject: [PATCH 02/13] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 50f6363e0..8045f7326 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1047,6 +1047,15 @@ "contributions": [ "code" ] + }, + { + "login": "MananS77", + "name": "Manan", + "avatar_url": "https://avatars3.githubusercontent.com/u/21033516?v=4", + "profile": "https://github.com/MananS77", + "contributions": [ + "review" + ] } ], "contributorsPerLine": 4, From e4473e5c882f5496eb89959aa453e1b9aca2510f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2020 08:45:38 +0000 Subject: [PATCH 03/13] docs: update README.md [skip ci] --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 13a32d769..feb64a1b5 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Sonarcloud Status](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=alert_status)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns) -[![All Contributors](https://img.shields.io/badge/all_contributors-116-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-117-orange.svg?style=flat-square)](#contributors-) # Introduction @@ -242,6 +242,9 @@ This project is licensed under the terms of the MIT license.
Matt Dolan

đź’»
Manan

đź‘€ + +
Nishant Arora

đź’» + From d41077f355a4f52c911220e5f001af377db851dd Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2020 08:45:39 +0000 Subject: [PATCH 04/13] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 8045f7326..58d3e4c5d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1056,6 +1056,15 @@ "contributions": [ "review" ] + }, + { + "login": "nishant", + "name": "Nishant Arora", + "avatar_url": "https://avatars2.githubusercontent.com/u/15331971?v=4", + "profile": "https://github.com/nishant", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 4, From 27c40826de7fa6c059d51775f026e59b24333410 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2020 09:48:23 +0000 Subject: [PATCH 05/13] docs: update README.md [skip ci] --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index feb64a1b5..21939391e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Sonarcloud Status](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=alert_status)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns) -[![All Contributors](https://img.shields.io/badge/all_contributors-117-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-118-orange.svg?style=flat-square)](#contributors-) # Introduction @@ -244,6 +244,7 @@ This project is licensed under the terms of the MIT license.
Nishant Arora

đź’» +
Peeyush

💻 From 38791a6a661f080be6cc1b3e48f742de993c7599 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2020 09:48:24 +0000 Subject: [PATCH 06/13] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 58d3e4c5d..80c2288b6 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1065,6 +1065,15 @@ "contributions": [ "code" ] + }, + { + "login": "raja-peeyush-kumar-singh", + "name": "Peeyush", + "avatar_url": "https://avatars0.githubusercontent.com/u/5496024?v=4", + "profile": "https://github.com/raja-peeyush-kumar-singh", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 4, From 7ac8eba43467c9fc85a2b5a61516fccef20a8403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 1 Aug 2020 15:18:32 +0300 Subject: [PATCH 07/13] #590 explanation for Acyclic Visitor --- acyclic-visitor/README.md | 126 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 122 insertions(+), 4 deletions(-) diff --git a/acyclic-visitor/README.md b/acyclic-visitor/README.md index f293e4393..19e886505 100644 --- a/acyclic-visitor/README.md +++ b/acyclic-visitor/README.md @@ -9,12 +9,126 @@ tags: --- ## Intent -Allow new functions to be added to existing class hierarchies without affecting those hierarchies, and without creating the troublesome dependency cycles that are inherent to the GOF VISITOR Pattern. + +Allow new functions to be added to existing class hierarchies without affecting those hierarchies, and without creating +the troublesome dependency cycles that are inherent to the GoF Visitor Pattern. + +## Explanation + +Real world example + +> We have a hierarchy of modem classes. The modems in this hierarchy need to be visited by an external algorithm based +> on filtering criteria (is it Unix or DOS compatible modem). + +In plain words + +> Acyclic Visitor allows functions to be added to existing class hierarchies without modifying the hierarchies. + +[WikiWikiWeb](https://wiki.c2.com/?AcyclicVisitor) says + +> The Acyclic Visitor pattern allows new functions to be added to existing class hierarchies without affecting those +> hierarchies, and without creating the dependency cycles that are inherent to the GangOfFour VisitorPattern. + +**Programmatic Example** + +Here's the `Modem` hierarchy. + +```java +public abstract class Modem { + public abstract void accept(ModemVisitor modemVisitor); +} + +public class Zoom extends Modem { + ... + @Override + public void accept(ModemVisitor modemVisitor) { + if (modemVisitor instanceof ZoomVisitor) { + ((ZoomVisitor) modemVisitor).visit(this); + } else { + LOGGER.info("Only ZoomVisitor is allowed to visit Zoom modem"); + } + } +} + +public class Hayes extends Modem { + ... + @Override + public void accept(ModemVisitor modemVisitor) { + if (modemVisitor instanceof HayesVisitor) { + ((HayesVisitor) modemVisitor).visit(this); + } else { + LOGGER.info("Only HayesVisitor is allowed to visit Hayes modem"); + } + } +} +``` + +Next we introduce the `ModemVisitor` hierarchy. + +```java +public interface ModemVisitor { +} + +public interface HayesVisitor extends ModemVisitor { + void visit(Hayes hayes); +} + +public interface ZoomVisitor extends ModemVisitor { + void visit(Zoom zoom); +} + +public interface AllModemVisitor extends ZoomVisitor, HayesVisitor { +} + +public class ConfigureForDosVisitor implements AllModemVisitor { + ... + @Override + public void visit(Hayes hayes) { + LOGGER.info(hayes + " used with Dos configurator."); + } + @Override + public void visit(Zoom zoom) { + LOGGER.info(zoom + " used with Dos configurator."); + } +} + +public class ConfigureForUnixVisitor implements ZoomVisitor { + ... + @Override + public void visit(Zoom zoom) { + LOGGER.info(zoom + " used with Unix configurator."); + } +} +``` + +Finally here are the visitors in action. + +```java + var conUnix = new ConfigureForUnixVisitor(); + var conDos = new ConfigureForDosVisitor(); + var zoom = new Zoom(); + var hayes = new Hayes(); + hayes.accept(conDos); + zoom.accept(conDos); + hayes.accept(conUnix); + zoom.accept(conUnix); +``` + +Program output: + +``` + // Hayes modem used with Dos configurator. + // Zoom modem used with Dos configurator. + // Only HayesVisitor is allowed to visit Hayes modem + // Zoom modem used with Unix configurator. +``` ## Class diagram + ![alt text](./etc/acyclic-visitor.png "Acyclic Visitor") ## Applicability + This pattern can be used: * When you need to add a new function to an existing hierarchy without the need to alter or affect that hierarchy. @@ -24,6 +138,7 @@ This pattern can be used: * When the recompilation, relinking, retesting or redistribution of the derivatives of Element is very expensive. ## Consequences + The good: * No dependency cycles between class hierarchies. @@ -32,11 +147,14 @@ The good: The bad: -* Violates the principle of least surprise or Liskov's Substitution principle by showing that it can accept all visitors but actually only being interested in particular visitors. +* Violates [Liskov's Substitution Principle](https://java-design-patterns.com/principles/#liskov-substitution-principle) by showing that it can accept all visitors but actually only being interested in particular visitors. * Parallel hierarchy of visitors has to be created for all members in visitable class hierarchy. ## Related patterns -* [Visitor Pattern](../visitor/) + +* [Visitor Pattern](https://java-design-patterns.com/patterns/visitor/) ## Credits -* [Acyclic Visitor](http://condor.depaul.edu/dmumaugh/OOT/Design-Principles/acv.pdf) + +* [Acyclic Visitor by Robert C. Martin](http://condor.depaul.edu/dmumaugh/OOT/Design-Principles/acv.pdf) +* [Acyclic Visitor in WikiWikiWeb](https://wiki.c2.com/?AcyclicVisitor) From 6a8297598e93195be7aa401af8f528768bef6f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 1 Aug 2020 15:19:09 +0300 Subject: [PATCH 08/13] #1047 remove module infos --- .../abstractdocument/module-info.java | 26 ----------------- .../iluwatar/abstractfactory/module-info.java | 26 ----------------- .../iluwatar/acyclicvisitor/module-info.java | 26 ----------------- .../business/delegate/module-info.java | 26 ----------------- .../com/iluwatar/callback/module-info.java | 26 ----------------- .../java/com/iluwatar/chain/module-info.java | 26 ----------------- .../collectionpipeline/module-info.java | 26 ----------------- .../com/iluwatar/command/module-info.java | 26 ----------------- .../com/iluwatar/composite/module-info.java | 26 ----------------- .../com/iluwatar/converter/module-info.java | 26 ----------------- .../java/com/iluwatar/dao/module-info.java | 29 ------------------- .../com/iluwatar/datamapper/module-info.java | 26 ----------------- .../iluwatar/datatransfer/module-info.java | 26 ----------------- .../com/iluwatar/decorator/module-info.java | 26 ----------------- .../com/iluwatar/delegation/module-info.java | 26 ----------------- .../com/iluwatar/dirtyflag/module-info.java | 26 ----------------- .../doublechecked/locking/module-info.java | 26 ----------------- .../iluwatar/doubledispatch/module-info.java | 26 ----------------- .../eip/message/channel/module-info.java | 27 ----------------- .../eip/publish/subscribe/module-info.java | 27 ----------------- .../event/aggregator/module-info.java | 26 ----------------- .../event/asynchronous/module-info.java | 26 ----------------- .../iluwatar/execute/around/module-info.java | 26 ----------------- .../java/com/iluwatar/facade/module-info.java | 26 ----------------- .../com/iluwatar/factorykit/module-info.java | 26 ----------------- .../iluwatar/factory/method/module-info.java | 26 ----------------- .../iluwatar/featuretoggle/module-info.java | 26 ----------------- 27 files changed, 707 deletions(-) delete mode 100644 abstract-document/src/main/java/com/iluwatar/abstractdocument/module-info.java delete mode 100644 abstract-factory/src/main/java/com/iluwatar/abstractfactory/module-info.java delete mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/module-info.java delete mode 100644 business-delegate/src/main/java/com/iluwatar/business/delegate/module-info.java delete mode 100644 callback/src/main/java/com/iluwatar/callback/module-info.java delete mode 100644 chain/src/main/java/com/iluwatar/chain/module-info.java delete mode 100644 collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/module-info.java delete mode 100644 command/src/main/java/com/iluwatar/command/module-info.java delete mode 100644 composite/src/main/java/com/iluwatar/composite/module-info.java delete mode 100644 converter/src/main/java/com/iluwatar/converter/module-info.java delete mode 100644 dao/src/main/java/com/iluwatar/dao/module-info.java delete mode 100644 data-mapper/src/main/java/com/iluwatar/datamapper/module-info.java delete mode 100644 data-transfer-object/src/main/java/com/iluwatar/datatransfer/module-info.java delete mode 100644 decorator/src/main/java/com/iluwatar/decorator/module-info.java delete mode 100644 delegation/src/main/java/com/iluwatar/delegation/module-info.java delete mode 100644 dirty-flag/src/main/java/com/iluwatar/dirtyflag/module-info.java delete mode 100644 double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/module-info.java delete mode 100644 double-dispatch/src/main/java/com/iluwatar/doubledispatch/module-info.java delete mode 100644 eip-message-channel/src/main/java/com/iluwatar/eip/message/channel/module-info.java delete mode 100644 eip-publish-subscribe/src/main/java/com/iluwatar/eip/publish/subscribe/module-info.java delete mode 100644 event-aggregator/src/main/java/com/iluwatar/event/aggregator/module-info.java delete mode 100644 event-asynchronous/src/main/java/com/iluwatar/event/asynchronous/module-info.java delete mode 100644 execute-around/src/main/java/com/iluwatar/execute/around/module-info.java delete mode 100644 facade/src/main/java/com/iluwatar/facade/module-info.java delete mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/module-info.java delete mode 100644 factory-method/src/main/java/com/iluwatar/factory/method/module-info.java delete mode 100644 feature-toggle/src/main/java/com/iluwatar/featuretoggle/module-info.java diff --git a/abstract-document/src/main/java/com/iluwatar/abstractdocument/module-info.java b/abstract-document/src/main/java/com/iluwatar/abstractdocument/module-info.java deleted file mode 100644 index 9121f0049..000000000 --- a/abstract-document/src/main/java/com/iluwatar/abstractdocument/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.abstractdocument { - requires org.slf4j; -} \ No newline at end of file diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/module-info.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/module-info.java deleted file mode 100644 index f075aadc0..000000000 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.abstractfactory { - requires org.slf4j; -} \ No newline at end of file diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/module-info.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/module-info.java deleted file mode 100644 index 78de5a786..000000000 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.acyclicvisitor { - requires org.slf4j; -} \ No newline at end of file diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/module-info.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/module-info.java deleted file mode 100644 index 8f331c848..000000000 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.business.delegate { - requires org.slf4j; -} \ No newline at end of file diff --git a/callback/src/main/java/com/iluwatar/callback/module-info.java b/callback/src/main/java/com/iluwatar/callback/module-info.java deleted file mode 100644 index 21a7a732b..000000000 --- a/callback/src/main/java/com/iluwatar/callback/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.callback { - requires org.slf4j; -} \ No newline at end of file diff --git a/chain/src/main/java/com/iluwatar/chain/module-info.java b/chain/src/main/java/com/iluwatar/chain/module-info.java deleted file mode 100644 index 4f11ab327..000000000 --- a/chain/src/main/java/com/iluwatar/chain/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.chain { - requires org.slf4j; -} \ No newline at end of file diff --git a/collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/module-info.java b/collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/module-info.java deleted file mode 100644 index f8bd30a68..000000000 --- a/collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.collectionpipeline { - requires org.slf4j; -} \ No newline at end of file diff --git a/command/src/main/java/com/iluwatar/command/module-info.java b/command/src/main/java/com/iluwatar/command/module-info.java deleted file mode 100644 index 0e0c0b31f..000000000 --- a/command/src/main/java/com/iluwatar/command/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.command { - requires org.slf4j; -} \ No newline at end of file diff --git a/composite/src/main/java/com/iluwatar/composite/module-info.java b/composite/src/main/java/com/iluwatar/composite/module-info.java deleted file mode 100644 index d75a7b8f8..000000000 --- a/composite/src/main/java/com/iluwatar/composite/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.composite { - requires org.slf4j; -} \ No newline at end of file diff --git a/converter/src/main/java/com/iluwatar/converter/module-info.java b/converter/src/main/java/com/iluwatar/converter/module-info.java deleted file mode 100644 index d83a43c6b..000000000 --- a/converter/src/main/java/com/iluwatar/converter/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.converter { - requires org.slf4j; -} \ No newline at end of file diff --git a/dao/src/main/java/com/iluwatar/dao/module-info.java b/dao/src/main/java/com/iluwatar/dao/module-info.java deleted file mode 100644 index 08e4f662e..000000000 --- a/dao/src/main/java/com/iluwatar/dao/module-info.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.dao { - requires org.slf4j; - requires java.sql; - requires h2; - requires java.naming; -} \ No newline at end of file diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/module-info.java b/data-mapper/src/main/java/com/iluwatar/datamapper/module-info.java deleted file mode 100644 index 7abd78826..000000000 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.datamapper { - requires org.slf4j; -} \ No newline at end of file diff --git a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/module-info.java b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/module-info.java deleted file mode 100644 index 25685d4d0..000000000 --- a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.datatransfer { - requires org.slf4j; -} \ No newline at end of file diff --git a/decorator/src/main/java/com/iluwatar/decorator/module-info.java b/decorator/src/main/java/com/iluwatar/decorator/module-info.java deleted file mode 100644 index 50d17f022..000000000 --- a/decorator/src/main/java/com/iluwatar/decorator/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.decorator { - requires org.slf4j; -} \ No newline at end of file diff --git a/delegation/src/main/java/com/iluwatar/delegation/module-info.java b/delegation/src/main/java/com/iluwatar/delegation/module-info.java deleted file mode 100644 index 156477cde..000000000 --- a/delegation/src/main/java/com/iluwatar/delegation/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.delegation { - requires org.slf4j; -} \ No newline at end of file diff --git a/dirty-flag/src/main/java/com/iluwatar/dirtyflag/module-info.java b/dirty-flag/src/main/java/com/iluwatar/dirtyflag/module-info.java deleted file mode 100644 index bf47d2cd7..000000000 --- a/dirty-flag/src/main/java/com/iluwatar/dirtyflag/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.dirtyflag { - requires org.slf4j; -} \ No newline at end of file diff --git a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/module-info.java b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/module-info.java deleted file mode 100644 index 4f4216ea7..000000000 --- a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.doublecheckedlocking { - requires org.slf4j; -} \ No newline at end of file diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/module-info.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/module-info.java deleted file mode 100644 index b1bc2e824..000000000 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.doubledispatch { - requires org.slf4j; -} \ No newline at end of file diff --git a/eip-message-channel/src/main/java/com/iluwatar/eip/message/channel/module-info.java b/eip-message-channel/src/main/java/com/iluwatar/eip/message/channel/module-info.java deleted file mode 100644 index b904ee1c8..000000000 --- a/eip-message-channel/src/main/java/com/iluwatar/eip/message/channel/module-info.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.eipmessagechannel { - requires org.slf4j; - requires camel.core; -} \ No newline at end of file diff --git a/eip-publish-subscribe/src/main/java/com/iluwatar/eip/publish/subscribe/module-info.java b/eip-publish-subscribe/src/main/java/com/iluwatar/eip/publish/subscribe/module-info.java deleted file mode 100644 index 50eab8360..000000000 --- a/eip-publish-subscribe/src/main/java/com/iluwatar/eip/publish/subscribe/module-info.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.eippublishsubscribe { - requires org.slf4j; - requires camel.core; -} \ No newline at end of file diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/module-info.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/module-info.java deleted file mode 100644 index 93ebd3173..000000000 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.eventaggregator { - requires org.slf4j; -} \ No newline at end of file diff --git a/event-asynchronous/src/main/java/com/iluwatar/event/asynchronous/module-info.java b/event-asynchronous/src/main/java/com/iluwatar/event/asynchronous/module-info.java deleted file mode 100644 index aa9b6c29d..000000000 --- a/event-asynchronous/src/main/java/com/iluwatar/event/asynchronous/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.eventasynchronous { - requires org.slf4j; -} \ No newline at end of file diff --git a/execute-around/src/main/java/com/iluwatar/execute/around/module-info.java b/execute-around/src/main/java/com/iluwatar/execute/around/module-info.java deleted file mode 100644 index a3e179094..000000000 --- a/execute-around/src/main/java/com/iluwatar/execute/around/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.executearound { - requires org.slf4j; -} \ No newline at end of file diff --git a/facade/src/main/java/com/iluwatar/facade/module-info.java b/facade/src/main/java/com/iluwatar/facade/module-info.java deleted file mode 100644 index 966758790..000000000 --- a/facade/src/main/java/com/iluwatar/facade/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.facade { - requires org.slf4j; -} \ No newline at end of file diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/module-info.java b/factory-kit/src/main/java/com/iluwatar/factorykit/module-info.java deleted file mode 100644 index 9440571c4..000000000 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.factorykit { - requires org.slf4j; -} \ No newline at end of file diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/module-info.java b/factory-method/src/main/java/com/iluwatar/factory/method/module-info.java deleted file mode 100644 index 4ea385c8b..000000000 --- a/factory-method/src/main/java/com/iluwatar/factory/method/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.factorymethod { - requires org.slf4j; -} \ No newline at end of file diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/module-info.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/module-info.java deleted file mode 100644 index 55c2d7714..000000000 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/module-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * The MIT License - * Copyright © 2014-2019 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -module com.iluwatar.featuretoggle { - requires org.slf4j; -} \ No newline at end of file From b3bfd43bffdbb02cc9b990c9616ebf632c0896dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 1 Aug 2020 15:54:46 +0300 Subject: [PATCH 09/13] #590 update Acyclic Visitor class diagram --- acyclic-visitor/etc/Acyclic Visitor.ucls | 115 ----------------------- acyclic-visitor/etc/acyclic-visitor.png | Bin 26645 -> 49064 bytes 2 files changed, 115 deletions(-) delete mode 100644 acyclic-visitor/etc/Acyclic Visitor.ucls diff --git a/acyclic-visitor/etc/Acyclic Visitor.ucls b/acyclic-visitor/etc/Acyclic Visitor.ucls deleted file mode 100644 index 03b6c77dd..000000000 --- a/acyclic-visitor/etc/Acyclic Visitor.ucls +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/acyclic-visitor/etc/acyclic-visitor.png b/acyclic-visitor/etc/acyclic-visitor.png index 636532c4d5d6443c94173fec7b0782eb8b661fe9..7b4df13d80f8c0d1be8ca32cbc39594bbd9ec7d4 100644 GIT binary patch literal 49064 zcmb@uby$^O*Di|kLlgm(P66rePC>f6OS-#LVWD()Nq3ikq|znbAV{}#v*$v6-}l?+ z`}RKPx(@%ai1j?r9CO4y?s3l*C?_L|gn)wp0|SF3F7`$N1_rhi2Ie8wlk%f4h6 z;2Wi*u$rTRjjfxdk+CC;sFAgiy}qN7A>ms$LQ_XaTP}KfTT6XwM<**wIs+T47Yv+u z;0m;6N@|XOe-HBjT*ft}MoHTynE}nKF6Pdb;5GW=hGI>(gc(}1T*R?L7PqNt_%6Ey z*78V3^{V1KuTGYwEO8~XB!7WZ-m|%%9;NkEXmN%8BM*8RF9J~!-WbwJ_UWpLYDuw? z7#R*A7bs_ho7d67Iw+VrZ%6Fv$LO(LLun%#c^&`8(g0I*`}d-}Y}7 z6SxXdbEX&B(4T64l={%T749WC7gE*bqcHhuqmP@Yjl$dOHLT4BBN2G}n$1cR#{-S`|qUc#y)YEz_2xPZkkG}kqBsd**Hh{bm{<#2PO&lEG~k?_X!duaBK1d%wg=S#tBp_Kc50fGz@nooAy8Qh+iI$Ai_q@LtJ+Oy6jy0zIgQC}JHI7#E8zVG8 zVIp2L8ACAXb*@iqIAJOu;Nm6|2?cyKK!g5`(9f_RVKmS6ADE=kB2{{B?#AkBmS2yd zfAS51p+@WvZ*3I_>U29=+nueWXJllgq}*)tgI|__{s+vazKqIejT-Z@N3ycA(`5or zvTWF4*Y)&jqz*QQv%a_;)mlu_F)>BW9TX_$SuZxzmi_~MTg1!q_5dcw4LJ?19EsR( z#8NNs-$z(zJcl&Z;I#d=Bk1DdA`&+&G*ntb!u@n7@iPkaeZEv{hLCiApWEY2#al{^ zM>tFdzrtj~aOmkq5QYO#tU9Iie&D?sU$BGST386Mm?+Mumrm!KUtILLI^E5aNp0u7 zzf3npVqLqLnHm4xwZlLX>(OdoJhptqfu|nE8(CR3i<0YExmt3|#1X6F^dN}P@K9#k#wH?P6E1ztQ zKgFa=p;j$j?g)0-ojJL_I8xf%+PYkr{m!GjwY|VnrrYAZu&}^V=y`Eito5;Xr82qB z=kAt8)*O-lgYiI;yf|284B4^4D#lvV;Krt;GP;4y6mQ#g5fcs#wlh>3~AU-AZdklgQ?Jd+Ki z<#LO9%`6CmRw9nnX5kAio8>3_O1|PRf)E5lXER@#zQI)PX{CMyObR*QegZdol`8Y` z!g`1GT+Z(du}98w{tY<>Dz3*H!#hRa5p)|I18G01e~luQY|gWJi6km2I(l%m-!c?} zrd|<*PF-s?8^?oDf*DGsS~?euN#7kBY2hQgpSQi8@kDv+Xdvs-u%<7DQbFmg4c{xLlxMLI&=_M7nvZW;r_4UyZe*t(#7gPA*$xvMO zpf%f@ODFq^;~M?10fz6jwX{qPZo&U#noHoy@oJ3K5z$sSZjLzap`oA%KEgQ@gIawnQ9D&Og*;(WICi?dzF4U;`vhF>I58?}d3RSD z*6@cKtMSL4w>qC~i8weCYSw?W`EfxO&y=^S)*`FIgM+imD(R%n>~jVrVV$2Y*wfWu)@tAxx|^^#D{N*htt=8;J!eWU-#HWN)Q`^JI8_D8FSd!2+w#6Y_9_Rp?x z;c-WMT!wj5`NaUqIGT(K{@Ziny-4U{1=hN=(NB+#49Ehe`O<*NDi4W8!^)$8y@n@w z+z!jj`t_VPzQ6M_iWj^(+aGGKlnk#j9(b!OoUg{E?XHqAukjtkevQTCNUO`DmuNZ> z5fQjb?zJGb< z{3ID`*j!xNt=WUE@uHQVjV}9Pe|(v!V_|AQMg@l9(2Gf0Rd*~vg8Z*(a zH}le`8Z2k3#mU!K#7DY+qu@iI9%Q7UpoKwlWUbXGun~@ zw&VbqWs3DGKcAvj_pO1!G{rC?y>9ak*m&o}x|1u1~Ajm}1Q!eChoIg;@sH$B`!DhYVXAk`W1rW{*@;;?QMefR*6l$V{2Mx%DX z`wqR?eigwY0VLHdk&!4w8Gg)xEADiMh z+uG_eOVu^!yCE*&6i9(BnU*qj7|sWosfGM=jgS#a>~1botjt|26HW(W>GyVo^@D>Y zA!i{tKj&i)8@i+5IO=)dO_AUoHZ&%OH7WC!@bG7UJc|r?*2I%rYatg=$>$xOu`6qdC)+)Jb2^$v|fAq6#74*C99MzY_=; z&6BNqRBbkDy!21oY3sBznRYZYuY3|(#bg4YjY$g)10dwDPNLa!>}&n zxp6KqZtx!;dIIv{w9x0dxw&qh9zH2rP&443VptAmc7U>cQBXOEu-NEQW-^opK|s%R zlSyJJu$U~}Z?b~GBjJ40!gM1`{V{nFNi2Hk)D0J9FbD!OmCLDHy8@vkf_Y*0ow#|ltAV)j9)>&Pkz_xJy22F>pg(!Z){dAso=4`iVN zg&cr6$X=S1e4ofyuOj=i%_0E(7!Q@}e?463se0RiFh>kUKE8+#0JuoIxjIv{^}aco z{49D8sjwfaU?uQ^+AJK5QKH*&8-Rq{-rf#kBRV>|BNm#FU`VjcAz7K3-3as=)uzv2 zaz#PDI9waxHttUViRSYBJc2wdFz|&c^m@Le_WKLG6%MReLM04|dN-qb_oxeof#~$h zSF5K18cQ1+rWzxl+@3wubKjY(kA5GWspOe|e*?M%l>SfFGu4!w zoEN9Nv(H}gbZ@{a>;J)V>g|YIL;QCs2??&JJL*i|u)RKQajP$3p1sW75%(nw9uB?= z_kWRwPG~{+H2RTxme8_VU3DO%UM_Mz#w4Xv%M;3-piJygJ()bt;_lTIvI zAE`@|$0RnNEIg0+-`}MNA?oIMi*Nm-8WI^9`9J-Sw6fWgc$drF+pXE}INA?)HJf`4 z8{^vOQtO^!9}UGJ(d%{wZwpP+f_o(}Kp%ayZUOgUrHGCgHgk-zdKNRGU0Mr=Gn4sz zT${mrEiU+}O`+~)qXdh1FWqp-g{HuVQe00AFGrXtWlQ9*r zW?m9Ufmv5LTq$z#NTi@JoBu;zWOlu+hg-JHsWJh+#V-&j4JJltEF60Sj~1h|BGZT|ct(&i z2+7Z~zIG{gi>v;_q<+7J@6g$Ze9Yry`!?w2cQ&t}T_sPf8qt?&o%CW`!pbk`A{)E!{{QMJ{mmmu9x0|vk z6ykjNMLyFQN0o@vkz(LH2ZFr`jVygQsang~x%lD7c)xn#O-TF&lTSklmT0vxyIFFK zLLM-~sZ1$35*r(oM|*S={fd2({wW7Zlf9DCJeph9nj8KqEG>1h(3YZmv0`94-)RI} z5J$2K853Z(mdI_=BU zXvLl^QLh{)8fB{OBBtKwe{F%3Lu%=~`>ILNYGy03{%Flj7UpCyldCMZa6-{$bP@}1uZ85?*b9(`_i^83SFN5L8eK<|+kNTARunxwTg>>^nwKj1j5yTv zrL)y1Hb?>;n9T7Zuh*78ps6>Z!V$H+qE?ZjQ)A%w(rIeg-JACs>q5q#QEq77+M229 zC{$L=UQI;3kTfGg?Krh*k^UL}*laTu!`^011T~5=XQ?l~?(%BL$)0Mu$%ER=h}3G1 zqfshRp}k|6>S&K&+o&7isHjXmqyh#kY(({0J3_L5Sa>4V<$$ZaD)*qtLvEve-Y@jJ zpQ(&Ps}+$Caq3K_I5sVfoK7v@M81N&_rpBU)vPVn{cPLT8`~#0nX4eSzQ=#Jqn+{I z0N~~Pqs-EBvr!F}>uD3|m%Lmg+7UJ4KanSUt3>=__u zRqr6`yg8Cm#^dQa6iMtc+8T<>-A#=~uj4QEwH;zGJyoFiVP+2J2WbedI?|Z%pX+>n?zGygvYA;Tnq(9z6UEUs&K)S&eQ-`>_2is2 zSH^{{=;mtjyZ_lf!Sj+-30(u|hVkn|1k$ho zo4qQt{D^KnS^8@SA>u}(CQ@j&>=cCBB@TV4Qsl`NXYBp$DrZHbah|6ti4l7 zcfj;zuS|QR;gYicG^u^mBL|#LEO+Bk%%_jk^ih@7dg9u+Z{BEI`C$-@Vklm^$xtM* zb(cbbK~J_;W%7ov=d~T#bhE{XZa(5@V7OG)+Ht86R{$LzZm5F8&LKd0?R zfFP?%nnf@fS;`3M0}R5xNXN79=^h48e;FN6kt@ z9wP+wDEVBaOrg(?)_+~r7iB=0$k6pVqTS^}G{)V_MnEk=7Q{`qMczn!B>}1!Dmn67 zNJQL$M3#2zqujG%ClX8R_ZS?BrP8;^py7SCH2g znC+sB+1T^uV%^H{DW?~v!=WJ|_0DwF$wCknqgSMRVpRq=jQmyJxbb+gJ~qIikr`O9Vsn*|;gbj9h)9BvnD zk=2%4u2?d1q3?OJ+&L`>>VeSuM`A|-^M)wq-8ttAY&)L!?;{2zHVey%yeQERUC<>< zY)v-=L3X*u3wX9~_7R=WZuz7?_LUsgEW7oWq(BM9i~5QuIjWGJK`Lorx4}W=7@GAV zQTe^{9EXQ3)TwVK5U6S8$Np`#=Nwl0hK3}Nw&5&MN)+p8>i6huaFBS*9LK<-H)h;s z^fV~axG4*yrA;0_v~oYb8gwnV!$j-^)>sn3Q>UbTUoxjeQV`jE6v%AS4)~;Q0_z@~ za$U(Zp1>^o-bm27X*X0uBv4SUDJ)`cqa8s25Aj(ry?sN!NwFOXKtnW%j9wr{r78p| zkYJ?t<{gL|=Q4&XX zT(8e_@i^_}xMRsoP#~ApX1X<2v!;NX*qvox+CK1B<$A)ul@-2&SWiV`$&jZXlK6Hg zB`%_p{m1!6pr*OYQ`+&MB+>NYng)Da&ZY5mKGJvkzko04w_Eb_w*X2f$p727Z!0T? z&;luyy0?_964apK{1eBCrMco3;GulIMRa*<^E;JhXRF54TUnd-buk_vZx&Wo(El=x zkq#fcgS9}w=qDh!+tSfDyEj^K!`E>w^;D*mmHZ)1eXevG~7AmMxt!Ck*NSb8l{q?q^q=kmneg~|6ezm`#=>**@ube{#04Xk3h z-+4-(m8)-o+EVN~;xwRaX&-&8^1<&DZuldub3tg}Afrw_Mc?8824sP!5 z1!$Pjo{Ba(tiQ6dMCjJgpMJbTQZcY;(N&soZ=^+si_HGsZ1xWu6^gj;i7kPr>xV@&M-c&8TmcX z)RueSY|Ylva(lWqC2Nv$*#l1Nvu0hK%ic~b-HiKhG*h*|Z6_fcA;#`4_JPcMi2wEb zz+(L-_p)^Axn?iaQ>`V(E8w#IoBL-aig{FUhy$aeqdx)5XowDtfCx~pMdoex7p#m* z7|1c-rI6Gnj#yD8M_9cwe@5#*oN05hT{+UDEO-+wYp&>##^>e4*YiymE?%bHCg{fx zIAmn!YdF_U6i#tJP9%eVNB6brF@OKaMM#_#?kl&$2D#UKM-Nlyo_T~;rC|nA!@(Ap zi&Gfc2vkdw%O_kCJgul15vNE6ikaP&0jluhstgubVFe$a5nD)z;(!zE60-F+5 zSj>@WiJrU7r+)4HyO=1{-l%yYZ~flmoJ}wBwMxvDD=>imK41i;c5m0yv^s~-R2ZGHdBP-=<0>h8chm~uwQuIbT%^?Jwm1n*W@UycBNudzl zY&o0s&1Xl97OO$ubE1x$Q&dR$u#lL_)md4+n}dmlM*G?T|LRcsP;Yv3{1bq5mtp$I z@Ci2YU-NM=3gXlqN`ySNoa3ILPF*k742XIE;7?1D?QqroSx-KJ4pHmSu1ExefY}?% z9iQswB|0={qs)PZrjSc3O`S@VT@hn1g>@kEK>e$s0_D-hFi|C?a#38PC$-?(95XbiVJ6mM4uf}FA4f-N|M3hrJsJu$Bfq~GjaS`E_K+pJWaR* zM5B?$jAXcaNmR7@nggYv=?H%B{JWizzbhf`Hqr5yG_msD=oX=b`p*+eT2}o#6F=wb zJpv~Zr5U(jbX>IQ;zh8{#VY`J#4Ch7fnA^=v~VRd>eq%QAtE~ptkY^-w3+HMB6gKM zu9vU*5(JTn3`It0It^i^By)C=#-b~T`Z3^ z&V=h`%gX^_i8dH&OO4Ezr{`k(6ziu~Dzr~{DZ`X>h9xom<1Iv4hl!KJ{%!>^nnGuB z4(K>yP(KL1^7eNzovt0}Gy4Kuwd>|oQR(9JF;P{tF=H;8UJ|8U|F?}{)HfM@{Fpgs z2hE-tI}Y;izjWf`-CnlIQ8lR6Nb z-;SN*BaWE5(lNICV)J`IEee!*P+OOLE2aB4)FUw!IuW6ULlnpJk01qcEXm(msYbQ` zBc_R1&=P{=3QwNrV{5F+LbpL2zEf${GCN>c*I76rA>*tph+O&kswD=%# z{?M#*9<|MpFv6h2>+9_~v|hMI#a(D{QXel|9qX%-ggOM`>(0o(K1Ub~MG%18Dq;z) zuzbc4ThvY}F&h|K_9j3J{Uy(5heqen=>vcX>KjxHzZ$wt2bXc)T)hA=C0{2^TLA&U z=*LX|av@mt5P-k%QMxohR2q5s7R*tn5Q`!&s`(V$c=aLVxs)CJ?E3H&y%)>``ItWM zs86z(Fnvy0ID7;*U@|T!h=EXs&=&_ad>cveL89=}e6Qz*6I{Dh0&HFW4{Xr>le0?d zP^;C{KOq-$4a4uoG~RoHg3CTgr;z0OTYP}g;L_f`Z}!tWNr~Rl*}Ai_ z0!1efR8u4ptJ68jxt4(OdP_3!C+rRNM+l+D-i~_&jIE-!S>Imke7TOW-aB346JK%E z^MZ%k|BA)HGlQu)OFrj;$^Z3D9ZHnGMA-ZzI2gdyq!g zwwquKK&#zr(BMAu2mpHuiu63 zP1asXn3#Twp(#`Nzc`xls|U`W*)HGmZUE8r##&82@Ws1Ok1qGn=)qoFN_Cx_!<{H- zB@&9T%Z@Q<_hm=u#_4_wE$$H<6I26l``h;n}fI-J(fDsxl+SunIV@?}fweY}pddSLt9|UL>C-sP}`%d#uVtG*=2+p;XI^JTFSQFlKi&Z+^P!#b#Kh z@YM8l9G&)i&{v45hy??-JzuWP?qq8pf+VIo!X~svmxG7;=!?9-9}?Cil%T|-8AW)8H}$J(C~2;-Ecg{dqTxr10G zQ_VFZ*!}r$HV9=CoG>K>K;qAniIAZ7;|#prnTPE^myi^j#^Nn z(3lSkO%Yg4^w#me0FNX!iO{8N7cHR?8lCN~FtP?F(hFbeqv_R~J);0v!{PAa+VOjK zn4P^7HTcE|ja=Qoy4+MAcPl#^mCxOA1K{Kl`%T2Gtat@tZLMB*8=d$T!5{nlbpWC} zZ7H4nx?nRI#G``1Kf7H3U8hD3)ntjL)%sv;aRl3Wf1=KOL(TOjxy@4Lr{ajeuIx%= zabNHTu>$>ym--njKGBo zRJ^rsavwJ%zBdHq!?rV2bDu z&-TT2l|{rc+b|WiH6;vnx>#qz%7Bm6? zH{6?%v8#BPrc>!5BGU^>I6pXzrC`h~VSfICYg1O61qxZ&XD9L_!XFXXEfdts^}L;b z#=k=uh~UC^ISa5%*iU=^e$8c%W-rk2sgMvRo0)=Q^<$YuUh$_HH2=y!2@$Lqf4uPZ zM1sMDDF)!H25B?|B>kln^Sm&+AA!5-E8N}U^YA1g-1WBJQD%6YsaVajNyvoh>yk@h zb)UVy_jvS?YGRRN6lFquj`DyTI5i`Uy@7BQpF8~CP43al6Wu#gU^MyDtFiZR2ImAN z*^oNx-CS%i*$5e+Wpl>IWmw(oIdoK<1?03}@o#S0fFz71JCfD1HKt0W3d`WZqr~Ry zHa#L0we#b|tFvc3ZYb>Tjs)=V+?N_n?ibR@-YeA5JYu)}iOEP}m;y8Yu*swDX1grH zQ8W<4ZsWU#O1BH+82oTg!|@qq>{Zd0iP*}4q?@}kL~m~gDiufbsqapw zJ2pWWHS(0%WUS^ZBGIb(Kg7I9sac>8nQaG%?AH@&zEF085k(Z|T{n)3X|H+~NG;7& zUtIY*und#9s!W?L84{||<0Lc&Do+3?W-E8zMcmp{LddX;@5HC86cMj{@=Eiu5tQV| zM-f$q{$%P5K;hr*-qg_l$YM6~X{M&=bG@?paOT3rkvtVdu2%AIw%v-7em*ToF$;w& z5gdj0KS4oV01UGi@E14Dr8D0)vAUOrT7Mm1ggIOD8B^)+TMA`s(&IuCqJi&g9N_x> zv!D!Y{tX+K4ixx3H^lpUtw)tu(Ds8QtOkH2A>YL2`$Er<_7z^;H|C`p#eL`W zjz$DHGjgCo30T>4yHp=D9;jfw4`rZFunw!s;aL2!2<^{O>Zlb%eZ!St{pMoFI6eQxxR5R1?(=!Vu}jR;?x2ve`=QN zSuxS{%uEUocDGN?9H+Nubaj%v|J=J6XjKl0W4E{$J;F?yf5&I0rtvzP+vPNl{%#o1fZ16K@*ts) zlxRw_eK8-80Z>k2`(F!YkeDzvhD35l1VJO}L7<|`s(?hwWp5x57c|yd;WB#s+8EAI zuL@XfYLo@*48?8i=qxq(YG=3I!z!_jm5E6oCjK<>O+jkuRPlMi#&&OP^i#C+gK++b z*|A2epsWEV<9brNQDx*^!u_(Spw+F27_BI7m`=C~OYvFxkCqALyNlrWRXkh8c=>30 z*}}oiH^-w~fGqbq-TCNf+0eVuS-}RP3WQ}4`UklA4*?!NEe2d(Bjpmu5gXM}gVLg* zmv{9_j>igskEEkpO=d6iIJNYbAY!!y*~EM-|HsZwxy_;t8t-^fJo(L$EJe}xEYTvs zL0O*P-oSPQV`eDQ$-@#-|LGyING)QD8Sr;I!jD;=(g;~61HYgQSrhT-!YMH9LZqC-P<{M(ZY53j&_?MINXtZ#|c2FBRw zLpgy!8FCI!uoBtSpX;cW$ZYZk5Hj0i1vnUMLZrl^r)0t67aepHhw;Ka5-O!y0fiUm zo|4TG65aZW0hJdKcUei-JSKz3ugZ=_WfxMkknN+!)?$*$Q({f2%=JO#FwBe1y%^22 z6Aqq9;X?1v-JLAs9Y{o~a*B~@4?jG8DL|W1bG{Ni6HY)7M<+8g7UE2q)R7?JTOzAv zb!9+~q4)I_83)}C5fTHL>SRzgwPtlbCKg9HeKswFQEx=E*DT1;7&r}bISg62T{ECP z&9#77lwk?jF*}?|k>TW`n6c{o?D9}JJn#S#LHv#&bUrW+3Q#Rh&?;Lfa!{ETlp#z4XB-tU@gWuO|q9Cj#KH-y_SE3YKML zNE0_;`il=rG#k|+z(r*f7$QdRrrw&ETmgm>2T)d6+_Tqbi@Y&#F>)*brm2XEdT`;1 zyrEeO2Mpw{32ZmMm@t$lV6~&7-Q;Ch(d4r;-bqvR8P}7?XDSBNh-98JXE6i3=aL{A z>0@dVg8sYf_Ah$&_K2&Pq%UG=v^dzbsdu)ygOU2y2+y3&6(tH;!qd@{B}^dzfJ&We zIBQI^5b%9j|7@4W0>o7B-oqW~HZ_FCf(=OZ=STekx-`15XcpEi?Vx)YG#Jc}`Dp6g zYBc+SNKp70wPvj&;E)24m}hIPzQrGD{y5#`1?QBKkHHjGlPW{G~_SV4|SgJu@vS__i1PDXc~~*xiz5+|iDb0F9-^X?qf$YDXth#dCseX)%_MBGiU|tAM3@i-&EI!c0o&Jh#-9%@k_pbPX9Y@L1|qg z5#=+6)LChs_K?@8ianaw6Q!O+R*_s z8=*acLTJlS7+6K(9Jre@S!X|DVg^ax;lKNWmgRPlk|SFn5=cU#AP-tDYt~?Nw#da_JTBi{)V?5MJ)rV94{!iODvNd zF7G^sXXL$>?wY2!z`#>epXp|&nFcslRIYKge#I*6itq*LorGA5o>*cZj*mlLzxhp@{uT@-_*HXVd>tIj)t9V#^KSEw^ zXEdy{i;Y;iLDwm&#u5^)F&Ed&)4O-Cd7ZLEtYaiV96IkW1W9y@Pv*Z3^xuEtg6P1q#?2y&wj2f`5`o517Vhs)rQ7t2M|*dT`R2#LItqUEGIm#6lT(w&k5MFkqwq>ni$_RXEG~Ou zW^N6FdjeEYADNEf2>96I1>{TE*GQKUQA{&AptDlP)XR*15c_v$S`lyyySqu(2ZeKU zJFC{~1tP?LoB5O7gjQp1(_7)ZTxp9ZcZShKL@vLn{sGi3Tj?a0eCJ&%YwK7IAON`a zjH!M|qHqt+Xtp0pO`HJ#$DZSuAp1X2Gynf#U)*f7(PsCH!@IjwoAJU29zXgTgMA!j z$i{L9y1>+axg|G;G=@?!=w>PA&Y@K4nqpW2Te!BCEiCNx+7eoyxPi`dKbtj&DPB4< z2}id~$7%DYaO|Iff&pE|+fNa!IEJBgeJJFpvq3{}IkUVq@jJvu+2afH68aH2pslE+ zXdQ`__=gF*Vt*jQ)5}D;Xl)0iv>Qz@9aYPaXo=hl`gjbg@fHmKMK+tqrpwi-v_uTW z);hZ=Y5%{V>kRcHw3P98d`1L(nTh8nzR|TdcR66*HNurR+KAT!xWU7458~aKnkXMc zeXTinu5xkm7hx!+F%5{totsyqfF$YqMq{Fj%W7Yw-5B%;-YJwFD&PSUC2E|UzuX!# z0=kfY@i5>fH%Vo_@i&*YxGF4w8s1x62Bk@mw`RJErFVi^|P6W^L1p318^UI_ii z`4^IRh;V8R3V{N2#9n3ZHZ4EV>4el)P};6ZapdvCaoOr2QOEDHs|8*Li3zJDU=Y!4 zj^^R3>&tLLm*`l+&>_)tF@J87Hd?N5{JnQH5~z?7Qn^@v>NZ!p?3aP5s$52qMF$WV z_Qm1xoO_Js)@%?e)mhi1a;sK8DToAGo(yIzF2V|v6E}}%p9BlV$q4{r+Z)bOmizA6 zdWvtr-%Y-t5T^}uAM>M=IDoCqD(oR`TcjB zqn|T{t)?!X7wEQ}UiXK_6yK|cR6q`0TEc({OUFgMyF zsL73e;NwP*3?FY!ppd4=SpMX*fhM4Mu;My>UL9ghEl<~<${iI|q*Xt1?NF9ofAKS% zxao^~c?G-m4uyOsg-1%TV_qMd5JfCuOijCpO^D_1?TUrb^mfF)Lym9L|A~*bu#}lr zo-()h;~z{#vqMe?k>kDjTF{z#ay~0xHi)l+WF~5I(!di@w!9O?>>_&DPey1^l zdGt0`wd^)+lpmSb=hkzlga2qf{Pg(v$HEux_2W$jnLCLy_Y)m$Uwz0wROE|>o$~}~pf8LmuRS23{M_B+>pAo&~PyG5F znRu%JIjYxcg-Uj(y}Br@3F=G5rXehdl}h)GMXcuWL~@g;P1-9YhCyHd*gfPuEBKy} zpOB~We|ASdjf}kO`=HT2pVntvnr)q!Q)2q*PnklGu&t9c0c2QlbX%wGhm*(5sC-q4 zq*wt$HsQWCTzb#U`yVJcFbq#RY0PqNDs-@9`ltucaJA;+0&1cfC@-5oA|E-Lw?lcr z#)Q|QhT<|?-t9mVmNJ*`7Oa0Mba+K%F6SLzyexg1FGHWrz z$pG#+2qsro79+@*S2=It2v+Qc!zFUe$zYL+G?bI3URm%*lNL^$Dc7H;EIZHpEa_n~ z?Od5d%`0*GEl}V#pAwDr5J(qnT5jHleXPbXOq;q7q9#g;lyl5$hQBmVCpce(SxJUl z1=ZdX+yW$4mi$?UK2L~y#OU40nK>^^2HT%MIXqN+H%JjN&SaXS6_jQ^7@N=Nd} zN;^-^9^{%Dmu#}H0W;^OTaq$g4DIDu-RDMjN854(Yc)d%MBBeNsGCh{9-%KF@gCZZ| zLA^FLMQ<}87=KJQ6(RRs8n33q<@apAhMiaa?uv56)0EtQaHqgTf@*#?wPENZpbC~w zu@C0MBpaNfRWzcXDbYL=0tYR6m_{akJOyqYWB<TNwKs^<1bj!H*=O0NHfQkpI$=+ta|@NHKQ zCU1*EO;en8@3VF7mHN5&y>iyjd2GTgq-8rYz-Yf@y4DIi)vt0%r)h3_ zp~=a@B@jh;`dMT3u-Rf?oZR7&W>97*(w97+GWNU{vof`c_8r-eptC<{p#dc2a#=$W zJl)lN#EpXk0OOt+Sy?ypjaR0wUjq^?!wXqNjBcfZF}ySzozXQS4vg_J6dW@mVUkT%^PXu zUp4gz0bQp%$+92X;a$g-x1V+aY>xZ{_iniTWo4icneW8d=%_(wNZCa@q7}6a5$0$1 z51!L=hL?cf0gdd^W#33j`=6XaQPZwI_QyNH_~I!~P3igEBzso){AJV5z=oDP)XGYD zB;+62b9x|(q##W!=${eMs4)aM(Mw!K##_p1e|}zL(1mcy{<+G8xVx&et3|^|pYCJB z<5=`atAqyhI3#93f@)Js1#$gcuiOcK$jrOJEJ0_@aU=YArU0mNHXU}RyssDLTYRJe zIas7bDM?}cMzt0j2) zW+vPSBrOG{F_ferjN#(xyE|#Yb#}m=L4~o3dC03n4KX-bd_FQhF2-P7AsXg+nw4O?H+|0B%CQNbBSs9>IeEmt zN~s1kNB=3MCoowHpC=9&(j)d<)2nNA~3GB2sR>tubsQqJs}(iVZu0WU9lB zhi(Hbsq@P33n@U@3hY6>WOn!r!%G4Mc959kidTu#IQrz zZ>@jSSeP7~p(el2hL!*cXgHO(zs>QGBNrB-i@e2yQ4idh)3{8bk>UJ19-XF~tr9Vj z09a4!v$K^4Sb=o%MDLtcQs;OhiwNcK8*D;v5L71~{b;;YyJMh4AsFLiD%xD?%}9X! zKMEAJU|8MAU1Twd!NNvm9w-4S4{R~RKiHywB@F+Cb6;R=U4T{hvn7VgpZ>@H`pwM$ zU&-<~JxHGP)z)g?-CejcmF^-CB7kunHwV|u+3qaee8G7Oqp?_t2J89N{`ax5bN7?N zst@AW6jn*_Mm2wxDPPUT!C5!x$RZ?$L!rPQgI@wIk!C07gjGeLb#5d_@_KACAY(&ubBTCvR@O3ZYq`S|H~FE- zpufXqHIJ=cXs=Q+37s{s2UgnBO!G~=^}I&ql5$aQ2==I|hN#L6%d-&y_L^OA-bQ_% zM+_FwqYcL>CZj#9GzXzK36$;J;fYvz43xc7cGO4-da-Y@j46Sn^_RK$m}kiOo5+ zsfjjJAu%WbP^OuCfj8T7=eCXihKJXFoS@Ty(yS6di@Qp&HT_>H;un0jk( zn9W9^4?ef_%A&HtE#lE1a)L~s^e!lr9$lw`(d)8YK1+w+3!IqZ1v$DrkGtagD|sH! zl4lqX^x|`S_ZC*jXLhfAk!o9*(9NZGSbnt2XQXafF4fh;DUBC*NnrZOU3u%DQa1$Fou9tGKRu^wYNx+Y>Vdn?8&bv zFT@(Q0Y8=qW9XPIc?}G=fB>w3EbM5OUgy@is6RNK9*FtK^=Mk-Xt4S91mIN$1*u=X zW!(4OpP!}2>uADH%q(9&mIock{Q6LMFIg5KEyGvFi(1x?&p20x(!-lJt$s7a?TO4i zYcI-v{p9VLKeSeM4y=Tv=nq6lTMc9zh5RBRBO6fwN9ek3N?>#0cQI$UtHVuYNy*8R zOVQ~#Mh$wyHa!>Ld{uf?()q+aF(LxuXx@iFS#-40Gtjb?isCw6ND1lznAA+YQ*<0d z<9j9VI<_*D&3}CWyHyBIXMAT&h&`Zh&$Tb4^z?TsQb9U*vHrzn_X-@jwaOICrLlUM z9m=u|d|XO>hDQwd_YC0T;KOPAw+sEV;`SC=cJG2nW^6F zsx*>ZY;O8MAE}*bNo1nNY^bQo3{DI2u-s*dhL5}l+YkG0^Ys3MJ7Vz(1@#6T zfIsXac+f65O$zvx09NAB0xLA=!g_josy_ln^wiXpcI)w{8$pi`r!RI3;Gew J8O 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 Date: Sat, 1 Aug 2020 16:26:14 +0300 Subject: [PATCH 10/13] work on Abstract Factory readme --- abstract-factory/README.md | 53 ++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/abstract-factory/README.md b/abstract-factory/README.md index fba3460c1..141bf5021 100644 --- a/abstract-factory/README.md +++ b/abstract-factory/README.md @@ -9,13 +9,16 @@ tags: --- ## Also known as + Kit ## Intent + Provide an interface for creating families of related or dependent objects without specifying their concrete classes. ## Explanation + Real world example > To create a kingdom we need objects with common theme. Elven kingdom needs an Elven king, Elven castle and Elven army whereas Orcish kingdom needs an Orcish king, Orcish castle and Orcish army. There is a dependency between the objects in the kingdom. @@ -36,9 +39,11 @@ Translating the kingdom example above. First of all we have some interfaces and public interface Castle { String getDescription(); } + public interface King { String getDescription(); } + public interface Army { String getDescription(); } @@ -66,7 +71,7 @@ public class ElfArmy implements Army { } } -// Orcish implementations similarly... +// Orcish implementations similarly -> ... ``` @@ -112,9 +117,17 @@ var castle = factory.createCastle(); var king = factory.createKing(); var army = factory.createArmy(); -castle.getDescription(); // Output: This is the Elven castle! -king.getDescription(); // Output: This is the Elven king! -army.getDescription(); // Output: This is the Elven Army! +castle.getDescription(); +king.getDescription(); +army.getDescription(); +``` + +Program output: + +```java +This is the Elven castle! +This is the Elven king! +This is the Elven Army! ``` Now, we can design a factory for our different kingdom factories. In this example, we created FactoryMaker, responsible for returning an instance of either ElfKingdomFactory or OrcKingdomFactory. @@ -156,37 +169,39 @@ public static void main(String[] args) { ``` ## Class diagram + ![alt text](./etc/abstract-factory.urm.png "Abstract Factory class diagram") ## Applicability + Use the Abstract Factory pattern when -* a system should be independent of how its products are created, composed and represented -* a system should be configured with one of multiple families of products -* a family of related product objects is designed to be used together, and you need to enforce this constraint -* you want to provide a class library of products, and you want to reveal just their interfaces, not their implementations -* the lifetime of the dependency is conceptually shorter than the lifetime of the consumer. -* you need a run-time value to construct a particular dependency -* you want to decide which product to call from a family at runtime. -* you need to supply one or more parameters only known at run-time before you can resolve a dependency. -* when you need consistency among products -* you don’t want to change existing code when adding new products or families of products to the program. +* The system should be independent of how its products are created, composed and represented +* The system should be configured with one of multiple families of products +* The family of related product objects is designed to be used together, and you need to enforce this constraint +* You want to provide a class library of products, and you want to reveal just their interfaces, not their implementations +* The lifetime of the dependency is conceptually shorter than the lifetime of the consumer. +* You need a run-time value to construct a particular dependency +* You want to decide which product to call from a family at runtime. +* You need to supply one or more parameters only known at run-time before you can resolve a dependency. +* When you need consistency among products +* You don’t want to change existing code when adding new products or families of products to the program. ## Use Cases: -* Selecting to call the appropriate implementation of FileSystemAcmeService or DatabaseAcmeService or NetworkAcmeService at runtime. -* Unit test case writing becomes much easier +* Selecting to call the appropriate implementation of FileSystemAcmeService or DatabaseAcmeService or NetworkAcmeService at runtime. +* Unit test case writing becomes much easier * UI tools for different OS ## Consequences: -* Dependency injection in java hides the service class dependencies that can lead to runtime errors that would have been caught at compile time. +* Dependency injection in java hides the service class dependencies that can lead to runtime errors that would have been caught at compile time. * While the pattern is great when creating predefined objects, adding the new ones might be challenging. -* The code may become more complicated than it should be, since a lot of new interfaces and classes are introduced along with the pattern. - +* The code becomes more complicated than it should be, since a lot of new interfaces and classes are introduced along with the pattern. ## Tutorial + * [Abstract Factory Pattern Tutorial](https://www.journaldev.com/1418/abstract-factory-design-pattern-in-java) From 14487261d078ef96f0dec07633c05a213ee1e1ca Mon Sep 17 00:00:00 2001 From: Matt Dolan Date: Sun, 2 Aug 2020 00:03:36 -0400 Subject: [PATCH 11/13] Use of ${artifactId} is deprecated and should be updated to ${project.artifactId} --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f23369107..65d6d3e2b 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ https://sonarcloud.io iluwatar iluwatar_java-design-patterns - ${artifactId} + ${project.artifactId} Java Design Patterns From 689cc8b59b2f1c914ef9c05841e7e9998cb0bdbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sun, 2 Aug 2020 11:53:52 +0300 Subject: [PATCH 12/13] Update surefire and minor improvements --- pom.xml | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index 65d6d3e2b..3b4f05b37 100644 --- a/pom.xml +++ b/pom.xml @@ -375,10 +375,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.0.0-M3 - - -Xmx1024M ${argLine} - + 3.0.0-M5 org.springframework.boot @@ -474,7 +471,7 @@ true - ${projectRoot}${file.separator}license-plugin-header-style.xml + license-plugin-header-style.xml SLASHSTAR_CUSTOM_STYLE @@ -540,14 +537,4 @@ - - - - org.apache.maven.plugins - maven-jxr-plugin - 3.0.0 - - - - - \ No newline at end of file + From b0ded54c664141bfb7732579817598004cbc0399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sun, 2 Aug 2020 22:48:54 +0300 Subject: [PATCH 13/13] Cleanup --- .../java/com/iluwatar/abstractdocument/App.java | 16 ++++------------ .../abstractdocument/AbstractDocumentTest.java | 2 +- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/abstract-document/src/main/java/com/iluwatar/abstractdocument/App.java b/abstract-document/src/main/java/com/iluwatar/abstractdocument/App.java index b881ee7ac..d13021e72 100644 --- a/abstract-document/src/main/java/com/iluwatar/abstractdocument/App.java +++ b/abstract-document/src/main/java/com/iluwatar/abstractdocument/App.java @@ -43,9 +43,11 @@ public class App { private static final Logger LOGGER = LoggerFactory.getLogger(App.class); /** - * Executes the App. + * Program entry point. + * + * @param args command line args */ - public App() { + public static void main(String[] args) { LOGGER.info("Constructing parts and car"); var wheelProperties = Map.of( @@ -75,14 +77,4 @@ public class App { p.getPrice().orElse(null)) ); } - - /** - * Program entry point. - * - * @param args command line args - */ - public static void main(String[] args) { - new App(); - } - } diff --git a/abstract-document/src/test/java/com/iluwatar/abstractdocument/AbstractDocumentTest.java b/abstract-document/src/test/java/com/iluwatar/abstractdocument/AbstractDocumentTest.java index c0791c30b..13db318e4 100644 --- a/abstract-document/src/test/java/com/iluwatar/abstractdocument/AbstractDocumentTest.java +++ b/abstract-document/src/test/java/com/iluwatar/abstractdocument/AbstractDocumentTest.java @@ -40,7 +40,7 @@ public class AbstractDocumentTest { private static final String KEY = "key"; private static final String VALUE = "value"; - private class DocumentImplementation extends AbstractDocument { + private static class DocumentImplementation extends AbstractDocument { DocumentImplementation(Map properties) { super(properties);