From 8bf53fe91ddfc6617362c166ecd61e5069f77206 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Sun, 27 May 2018 15:11:06 +0300 Subject: [PATCH 01/23] Adding acyclic-visitor module in pom.xml --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index e1d025c13..00b0de4f1 100644 --- a/pom.xml +++ b/pom.xml @@ -161,6 +161,7 @@ dirty-flag trampoline serverless + acyclic-visitor From 9e15abbafc23318356ce10a771e810ec520fe90d Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Sun, 27 May 2018 15:49:35 +0300 Subject: [PATCH 02/23] Adding pom.xml file --- acyclic-visitor/pom.xml | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 acyclic-visitor/pom.xml diff --git a/acyclic-visitor/pom.xml b/acyclic-visitor/pom.xml new file mode 100644 index 000000000..4cb1ccaff --- /dev/null +++ b/acyclic-visitor/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + + com.iluwatar + java-design-patterns + 1.20.0-SNAPSHOT + + + acyclic-visitor + + + UTF-8 + 1.8 + 1.8 + + + + + + org.assertj + assertj-core + 3.9.1 + test + + + + uk.org.lidalia + slf4j-test + 1.0.0 + test + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.mockito + mockito-all + 1.9.5 + test + + + From 18a75c06208289633e1f98edd5ee20174615450b Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Sun, 27 May 2018 16:12:31 +0300 Subject: [PATCH 03/23] Adding ModemVisitor interface --- .../iluwatar/acyclicvisitor/ModemVisitor.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java new file mode 100644 index 000000000..eac2bd4a8 --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java @@ -0,0 +1,31 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * ZoomVisitor interface + */ + +public interface ModemVisitor { + // Visitor is a degenerate base class for all visitors. +} From 3f92b8f84e2481157d748b06f2dce8eea181fbfa Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Sun, 27 May 2018 16:37:13 +0300 Subject: [PATCH 04/23] Adding ModemTest --- .../iluwatar/acyclicvisitor/ModemTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemTest.java diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemTest.java new file mode 100644 index 000000000..0f7d3d629 --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemTest.java @@ -0,0 +1,30 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * Modem test class + */ +public abstract class ModemTest { + +} From 75734a6b7d3e77492d38b71bd0ca9a46dbb2ce7a Mon Sep 17 00:00:00 2001 From: giorgosmav21 Date: Sun, 27 May 2018 16:45:43 +0300 Subject: [PATCH 05/23] Adding Modem abstract class --- .../com/iluwatar/acyclicvisitor/Modem.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java new file mode 100644 index 000000000..b7e4d3f6b --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java @@ -0,0 +1,31 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * Modem abstract class + */ + +public abstract class Modem { + public abstract void accept(ModemVisitor modemVisitor); +} From 323395daaff39381cb52a465d5cdeb5dfadd4f13 Mon Sep 17 00:00:00 2001 From: giorgosmav21 Date: Sun, 27 May 2018 16:49:05 +0300 Subject: [PATCH 06/23] Adding ModemVisitorTest --- .../acyclicvisitor/ModemVisitorTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemVisitorTest.java diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemVisitorTest.java new file mode 100644 index 000000000..681925f05 --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemVisitorTest.java @@ -0,0 +1,30 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * ModemVisitor test class + */ +public interface ModemVisitorTest { + +} From bbdf1cd738af19a8fec33def061bfed226822b5e Mon Sep 17 00:00:00 2001 From: giorgosmav21 Date: Sun, 27 May 2018 16:51:26 +0300 Subject: [PATCH 07/23] Adding Hayes and Zoom classes --- .../com/iluwatar/acyclicvisitor/Hayes.java | 62 +++++++++++++++++++ .../com/iluwatar/acyclicvisitor/Zoom.java | 61 ++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java new file mode 100644 index 000000000..d829e7f02 --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java @@ -0,0 +1,62 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Hayes class implements its + * accept method + */ + +public class Hayes extends Modem { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); + + public Hayes() { + + } + + /** + * Accept visitor + */ + @Override + public void accept(ModemVisitor modemVisitor) { + try { + ((HayesVisitor) modemVisitor).visit(this); + } catch (ClassCastException e) { + LOGGER.error("Unable to cast to HayesVisitor"); + } + + } + + /** + * Hayes' modem's toString + * method + */ + @Override + public String toString() { + return "Hayes modem"; + } +} diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java new file mode 100644 index 000000000..099bdc63d --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java @@ -0,0 +1,61 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Zoom class implements its + * accept method + */ + +public class Zoom extends Modem { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); + + public Zoom() { + + } + + /** + * Accept visitor + */ + @Override + public void accept(ModemVisitor modemVisitor) { + try { + ((ZoomVisitor) modemVisitor).visit(this); + } catch (ClassCastException e) { + LOGGER.error("Unable to cast to ZoomVisitor"); + } + } + + /** + * Zoom modem's toString + * method + */ + @Override + public String toString() { + return "Zoom modem"; + } +} From 97718846d1bbb9a66f94b75bc8d5722ce43ffca3 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Sun, 27 May 2018 16:55:08 +0300 Subject: [PATCH 08/23] Adding HayesVisitor and ZoomVisitor --- .../iluwatar/acyclicvisitor/HayesVisitor.java | 30 ++++++++++++++++++ .../iluwatar/acyclicvisitor/ZoomVisitor.java | 31 +++++++++++++++++++ .../acyclicvisitor/HayesVisitorTest.java | 30 ++++++++++++++++++ .../acyclicvisitor/ZoomVisitorTest.java | 30 ++++++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesVisitorTest.java create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomVisitorTest.java diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java new file mode 100644 index 000000000..90e8a2a1b --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java @@ -0,0 +1,30 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * HayesVisitor interface + */ +public interface HayesVisitor { + void visit(Hayes hayes); +} diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java new file mode 100644 index 000000000..5f6fa0cd3 --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java @@ -0,0 +1,31 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * ZoomVisitor interface + */ + +public interface ZoomVisitor { + void visit(Zoom zoom); +} diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesVisitorTest.java new file mode 100644 index 000000000..96244f879 --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesVisitorTest.java @@ -0,0 +1,30 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * HayesVisitor test class + */ +public interface HayesVisitorTest { + +} \ No newline at end of file diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomVisitorTest.java new file mode 100644 index 000000000..88aab9636 --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomVisitorTest.java @@ -0,0 +1,30 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * ZoomVisitor test class + */ +public interface ZoomVisitorTest { + +} From 5e1da6361fd91d923dac256b209b7ba14ce9c662 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Sun, 27 May 2018 16:58:38 +0300 Subject: [PATCH 09/23] Adding ConfigureForDosVisitor and ConfigureForUnixVisitor --- .../ConfigureForDosVisitor.java | 46 ++++++++++++ .../ConfigureForUnixVisitor.java | 40 ++++++++++ .../ConfigureForDosVisitorTest.java | 75 +++++++++++++++++++ .../ConfigureForUnixVisitorTest.java | 75 +++++++++++++++++++ 4 files changed, 236 insertions(+) create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitorTest.java create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java new file mode 100644 index 000000000..aee1dfa38 --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java @@ -0,0 +1,46 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * CongigureForDosVisitor class + * implements both zoom's and + * hayes' visit method for Dos + * manufacturer + */ + +public class ConfigureForDosVisitor implements ModemVisitor, HayesVisitor, ZoomVisitor { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); + + public void visit(Hayes hayes) { + LOGGER.info(hayes + " used with Dos configurator."); + } + + public void visit(Zoom zoom) { + LOGGER.info(zoom + " used with Dos configurator."); + } +} diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java new file mode 100644 index 000000000..c2402d2bc --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java @@ -0,0 +1,40 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * CongigureForDosVisitor class + * implements both zoom's visit + * method for Unix manufacturer + */ +public class ConfigureForUnixVisitor implements ModemVisitor, ZoomVisitor { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForUnixVisitor.class); + + public void visit(Zoom zoom) { + LOGGER.info(zoom + " used with Unix configurator."); + } +} \ No newline at end of file diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitorTest.java new file mode 100644 index 000000000..78d442caa --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitorTest.java @@ -0,0 +1,75 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.groups.Tuple.tuple; +import static org.mockito.Mockito.mock; +import static uk.org.lidalia.slf4jext.Level.INFO; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +import com.iluwatar.acyclicvisitor.ConfigureForDosVisitor; +import com.iluwatar.acyclicvisitor.Hayes; +import com.iluwatar.acyclicvisitor.HayesVisitor; +import com.iluwatar.acyclicvisitor.Zoom; +import com.iluwatar.acyclicvisitor.ZoomVisitor; + +import uk.org.lidalia.slf4jtest.TestLogger; +import uk.org.lidalia.slf4jtest.TestLoggerFactory; + +/** + * ConfigureForDosVisitor test class + */ +public class ConfigureForDosVisitorTest { + + TestLogger logger = TestLoggerFactory.getTestLogger(ConfigureForDosVisitor.class); + + @Test + public void testVisitForZoom() { + ConfigureForDosVisitor conDos = new ConfigureForDosVisitor(); + Zoom zoom = mock(Zoom.class); + + ((ZoomVisitor)conDos).visit(zoom); + + assertThat(logger.getLoggingEvents()).extracting("level", "message").contains( + tuple(INFO, zoom + " used with Dos configurator.")); + } + + @Test + public void testVisitForHayes() { + ConfigureForDosVisitor conDos = new ConfigureForDosVisitor(); + Hayes hayes = mock(Hayes.class); + + ((HayesVisitor)conDos).visit(hayes); + + assertThat(logger.getLoggingEvents()).extracting("level", "message").contains( + tuple(INFO, hayes + " used with Dos configurator.")); + } + + @AfterEach + public void clearLoggers() { + TestLoggerFactory.clear(); + } +} diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java new file mode 100644 index 000000000..4346ffd30 --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java @@ -0,0 +1,75 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.groups.Tuple.tuple; +import static uk.org.lidalia.slf4jext.Level.INFO; +import static org.mockito.Mockito.mock; + +import uk.org.lidalia.slf4jtest.TestLogger; +import uk.org.lidalia.slf4jtest.TestLoggerFactory; +import org.junit.jupiter.api.Test; + +import com.iluwatar.acyclicvisitor.ConfigureForUnixVisitor; +import com.iluwatar.acyclicvisitor.Hayes; +import com.iluwatar.acyclicvisitor.HayesVisitor; +import com.iluwatar.acyclicvisitor.Zoom; +import com.iluwatar.acyclicvisitor.ZoomVisitor; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; + +/** + * ConfigureForUnixVisitor test class + */ +public class ConfigureForUnixVisitorTest { + + TestLogger logger = TestLoggerFactory.getTestLogger(ConfigureForUnixVisitor.class); + + @AfterEach + public void clearLoggers() { + TestLoggerFactory.clear(); + } + + @Test + public void testVisitForZoom() { + ConfigureForUnixVisitor conUnix = new ConfigureForUnixVisitor(); + Zoom zoom = mock(Zoom.class); + + ((ZoomVisitor)conUnix).visit(zoom); + + assertThat(logger.getLoggingEvents()).extracting("level", "message").contains( + tuple(INFO, zoom + " used with Unix configurator.")); + } + + @Test + public void testVisitForHayes() { + ConfigureForUnixVisitor conUnix = new ConfigureForUnixVisitor(); + Hayes hayes = mock(Hayes.class); + + Assertions.assertThrows(ClassCastException.class, () -> { + ((HayesVisitor)conUnix).visit(hayes); + }); + } +} From 36a14778dc9bf05649d9869990f2a1e9ef020651 Mon Sep 17 00:00:00 2001 From: giorgosmav21 Date: Sun, 27 May 2018 17:02:56 +0300 Subject: [PATCH 10/23] Adding App class --- .../java/com/iluwatar/acyclicvisitor/App.java | 66 +++++++++++++++++++ .../com/iluwatar/acyclicvisitor/AppTest.java | 39 +++++++++++ 2 files changed, 105 insertions(+) create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/AppTest.java diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java new file mode 100644 index 000000000..be57406dd --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java @@ -0,0 +1,66 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +/** + * 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 GoF Visitor pattern, by making the + * Visitor base class degenerate + *

+ * In this example the visitor base + * class is {@link ModemVisitor}. + * The base class of the visited + * hierarchy is {@link Modem} and + * has two children {@link Hayes} + * and {@link Zoom} each one having + * its own visitor interface {@link Hayes} + * and {@link ZoomVisitor} respectively. + * {@link ConfigureForUnixVisitor} and + * {@link ConfigureForDosVisitor} implement + * each derivative's visit method + * only if it is required + */ + +public class App { + + /** + * Program's entry point + */ + + public static void main(String[] args) { + ConfigureForUnixVisitor conUnix = new ConfigureForUnixVisitor(); + ConfigureForDosVisitor conDos = new ConfigureForDosVisitor(); + + Zoom zoom = new Zoom(); + Hayes hayes = new Hayes(); + + hayes.accept(conDos); // Hayes modem with Unix configurator + zoom.accept(conDos); // Zoom modem with Dos configurator + hayes.accept(conUnix); // Hayes modem with Unix configurator + zoom.accept(conUnix); // Zoom modem with Unix configurator + } +} diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/AppTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/AppTest.java new file mode 100644 index 000000000..056401ca2 --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/AppTest.java @@ -0,0 +1,39 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +import org.junit.jupiter.api.Test; + +import com.iluwatar.acyclicvisitor.App; + +/** + * Tests that the Acyclic Visitor example runs without errors. + */ +public class AppTest { + + @Test + public void test() { + String[] args = {}; + App.main(args); + } +} \ No newline at end of file From 27f58e0925297271c6c023c4cc1009b6e8c03df5 Mon Sep 17 00:00:00 2001 From: giorgosmav21 Date: Sun, 27 May 2018 17:04:22 +0300 Subject: [PATCH 11/23] Adding HayesTest and ZoomTest --- .../iluwatar/acyclicvisitor/HayesTest.java | 60 +++++++++++++++++++ .../com/iluwatar/acyclicvisitor/ZoomTest.java | 59 ++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesTest.java create mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomTest.java diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesTest.java new file mode 100644 index 000000000..ba5139bf6 --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesTest.java @@ -0,0 +1,60 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; + +import org.junit.jupiter.api.Test; + +import com.iluwatar.acyclicvisitor.ConfigureForDosVisitor; +import com.iluwatar.acyclicvisitor.ConfigureForUnixVisitor; +import com.iluwatar.acyclicvisitor.Hayes; +import com.iluwatar.acyclicvisitor.HayesVisitor; + +/** + * Hayes test class + */ +public class HayesTest { + + @Test + public void testAcceptForDos() { + Hayes hayes = new Hayes(); + ConfigureForDosVisitor mockVisitor = mock(ConfigureForDosVisitor.class); + + hayes.accept(mockVisitor); + verify((HayesVisitor)mockVisitor).visit(eq(hayes)); + } + + @Test + public void testAcceptForUnix() { + Hayes hayes = new Hayes(); + ConfigureForUnixVisitor mockVisitor = mock(ConfigureForUnixVisitor.class); + + hayes.accept(mockVisitor); + + verifyZeroInteractions(mockVisitor); + } +} diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomTest.java new file mode 100644 index 000000000..22391fb2f --- /dev/null +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomTest.java @@ -0,0 +1,59 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + + +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.mock; + +import org.junit.jupiter.api.Test; + +import com.iluwatar.acyclicvisitor.ConfigureForDosVisitor; +import com.iluwatar.acyclicvisitor.ConfigureForUnixVisitor; +import com.iluwatar.acyclicvisitor.Zoom; +import com.iluwatar.acyclicvisitor.ZoomVisitor; + +/** + * Zoom test class + */ +public class ZoomTest { + + @Test + public void testAcceptForDos() { + Zoom zoom = new Zoom(); + ConfigureForDosVisitor mockVisitor = mock(ConfigureForDosVisitor.class); + + zoom.accept(mockVisitor); + verify((ZoomVisitor)mockVisitor).visit(eq(zoom)); + } + + @Test + public void testAcceptForUnix() { + Zoom zoom = new Zoom(); + ConfigureForUnixVisitor mockVisitor = mock(ConfigureForUnixVisitor.class); + + zoom.accept(mockVisitor); + verify((ZoomVisitor)mockVisitor).visit(eq(zoom)); + } +} From 17164c282a7b707f75ca478629ec8bb998208230 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Sun, 27 May 2018 17:07:34 +0300 Subject: [PATCH 12/23] Adding class diagram --- acyclic-visitor/etc/Acyclic Visitor.ucls | 115 +++++++++++++++++++++++ acyclic-visitor/etc/acyclic-visitor.png | Bin 0 -> 26645 bytes 2 files changed, 115 insertions(+) create mode 100644 acyclic-visitor/etc/Acyclic Visitor.ucls create mode 100644 acyclic-visitor/etc/acyclic-visitor.png diff --git a/acyclic-visitor/etc/Acyclic Visitor.ucls b/acyclic-visitor/etc/Acyclic Visitor.ucls new file mode 100644 index 000000000..03b6c77dd --- /dev/null +++ b/acyclic-visitor/etc/Acyclic Visitor.ucls @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/acyclic-visitor/etc/acyclic-visitor.png b/acyclic-visitor/etc/acyclic-visitor.png new file mode 100644 index 0000000000000000000000000000000000000000..636532c4d5d6443c94173fec7b0782eb8b661fe9 GIT binary patch literal 26645 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 Date: Sun, 27 May 2018 17:10:20 +0300 Subject: [PATCH 13/23] Adding README.md file --- acyclic-visitor/README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 acyclic-visitor/README.md diff --git a/acyclic-visitor/README.md b/acyclic-visitor/README.md new file mode 100644 index 000000000..33c894ce7 --- /dev/null +++ b/acyclic-visitor/README.md @@ -0,0 +1,29 @@ +--- +layout: pattern +title: Acyclic Visitor +folder: acyclic-visitor +permalink: /patterns/acyclic-visitor/ +categories: Behavioral +tags: + - Java + - Difficulty-Intermediate +--- + +![alt text](./etc/acyclic-visitor.png "Acyclic Visitor") + +## 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. + +## 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. +* When there are functions that operate upon a hierarchy, but which do not belong in the hierarchy itself. e.g. the ConfigureForDOS / ConfigureForUnix / ConfigureForX issue. +* When you need to perform very different operations on an object depending upon its type. +* When the visited class hierarchy will be frequently extended with new derivatives of the Element class. +* When the recompilation, relinking, retesting or redistribution of the derivatives of Element is very expensive. + +## Related patterns +* [Visitor Pattern](../visitor/README.md) + +## Credits +* [Acyclic Visitor](http://condor.depaul.edu/dmumaugh/OOT/Design-Principles/acv.pdf) \ No newline at end of file From afe85e22e78778b0b4d9dad46aec70dca62bdfba Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Tue, 29 May 2018 01:37:53 +0300 Subject: [PATCH 14/23] Enhancing code format --- .../java/com/iluwatar/acyclicvisitor/App.java | 29 ++++++------------- .../ConfigureForDosVisitor.java | 7 ++--- .../ConfigureForUnixVisitor.java | 5 ++-- .../com/iluwatar/acyclicvisitor/Hayes.java | 4 +-- .../com/iluwatar/acyclicvisitor/Modem.java | 1 - .../iluwatar/acyclicvisitor/ModemVisitor.java | 1 - .../com/iluwatar/acyclicvisitor/Zoom.java | 4 +-- .../iluwatar/acyclicvisitor/ZoomVisitor.java | 1 - 8 files changed, 15 insertions(+), 37 deletions(-) diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java index be57406dd..97fdddf14 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java @@ -23,28 +23,17 @@ package com.iluwatar.acyclicvisitor; /** - * 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 GoF Visitor pattern, by making the - * Visitor base class degenerate + * 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 GoF Visitor pattern, by making the Visitor base class + * degenerate *

- * In this example the visitor base - * class is {@link ModemVisitor}. - * The base class of the visited - * hierarchy is {@link Modem} and - * has two children {@link Hayes} - * and {@link Zoom} each one having - * its own visitor interface {@link Hayes} - * and {@link ZoomVisitor} respectively. - * {@link ConfigureForUnixVisitor} and - * {@link ConfigureForDosVisitor} implement - * each derivative's visit method - * only if it is required + * In this example the visitor base class is {@link ModemVisitor}. The base class of the + * visited hierarchy is {@link Modem} and has two children {@link Hayes} and {@link Zoom} + * each one having its own visitor interface {@link Hayes} and {@link ZoomVisitor} + * respectively. {@link ConfigureForUnixVisitor} and {@link ConfigureForDosVisitor} + * implement each derivative's visit method only if it is required */ - public class App { /** diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java index aee1dfa38..b71893474 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java @@ -26,12 +26,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * CongigureForDosVisitor class - * implements both zoom's and - * hayes' visit method for Dos - * manufacturer + * CongigureForDosVisitor class implements both zoom's and hayes' visit method + * for Dos manufacturer */ - public class ConfigureForDosVisitor implements ModemVisitor, HayesVisitor, ZoomVisitor { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java index c2402d2bc..9e35ea0a6 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java @@ -26,9 +26,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * CongigureForDosVisitor class - * implements both zoom's visit - * method for Unix manufacturer + * CongigureForDosVisitor class implements both zoom's visit method for Unix + * manufacturer */ public class ConfigureForUnixVisitor implements ModemVisitor, ZoomVisitor { diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java index d829e7f02..30408a758 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java @@ -26,10 +26,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Hayes class implements its - * accept method + * Hayes class implements its accept method */ - public class Hayes extends Modem { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java index b7e4d3f6b..57207a466 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java @@ -25,7 +25,6 @@ package com.iluwatar.acyclicvisitor; /** * Modem abstract class */ - public abstract class Modem { public abstract void accept(ModemVisitor modemVisitor); } diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java index eac2bd4a8..f5668756c 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java @@ -25,7 +25,6 @@ package com.iluwatar.acyclicvisitor; /** * ZoomVisitor interface */ - public interface ModemVisitor { // Visitor is a degenerate base class for all visitors. } diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java index 099bdc63d..176a22ea4 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java @@ -26,10 +26,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Zoom class implements its - * accept method + * Zoom class implements its accept method */ - public class Zoom extends Modem { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java index 5f6fa0cd3..85646921c 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java @@ -25,7 +25,6 @@ package com.iluwatar.acyclicvisitor; /** * ZoomVisitor interface */ - public interface ZoomVisitor { void visit(Zoom zoom); } From 179a02bcdd3d6d7622715c045d28def548704ef1 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 11:52:23 +0300 Subject: [PATCH 15/23] Removing default constructors --- .../src/main/java/com/iluwatar/acyclicvisitor/Hayes.java | 4 ---- .../src/main/java/com/iluwatar/acyclicvisitor/Zoom.java | 4 ---- 2 files changed, 8 deletions(-) diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java index 30408a758..657a669b0 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java @@ -32,10 +32,6 @@ public class Hayes extends Modem { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); - public Hayes() { - - } - /** * Accept visitor */ diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java index 176a22ea4..f14c9e7e6 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java @@ -32,10 +32,6 @@ public class Zoom extends Modem { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); - public Zoom() { - - } - /** * Accept visitor */ From 49feead13f73fda032da86a9dce7a449b4f52b93 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 11:59:02 +0300 Subject: [PATCH 16/23] Removing interfaces' test classes --- .../acyclicvisitor/HayesVisitorTest.java | 30 ------------------- .../iluwatar/acyclicvisitor/ModemTest.java | 30 ------------------- .../acyclicvisitor/ModemVisitorTest.java | 30 ------------------- .../acyclicvisitor/ZoomVisitorTest.java | 30 ------------------- 4 files changed, 120 deletions(-) delete mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesVisitorTest.java delete mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemTest.java delete mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemVisitorTest.java delete mode 100644 acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomVisitorTest.java diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesVisitorTest.java deleted file mode 100644 index 96244f879..000000000 --- a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesVisitorTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * The MIT License - * Copyright (c) 2014-2016 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. - */ -package com.iluwatar.acyclicvisitor; - -/** - * HayesVisitor test class - */ -public interface HayesVisitorTest { - -} \ No newline at end of file diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemTest.java deleted file mode 100644 index 0f7d3d629..000000000 --- a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * The MIT License - * Copyright (c) 2014-2016 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. - */ -package com.iluwatar.acyclicvisitor; - -/** - * Modem test class - */ -public abstract class ModemTest { - -} diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemVisitorTest.java deleted file mode 100644 index 681925f05..000000000 --- a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ModemVisitorTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * The MIT License - * Copyright (c) 2014-2016 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. - */ -package com.iluwatar.acyclicvisitor; - -/** - * ModemVisitor test class - */ -public interface ModemVisitorTest { - -} diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomVisitorTest.java deleted file mode 100644 index 88aab9636..000000000 --- a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomVisitorTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * The MIT License - * Copyright (c) 2014-2016 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. - */ -package com.iluwatar.acyclicvisitor; - -/** - * ZoomVisitor test class - */ -public interface ZoomVisitorTest { - -} From 6167d06dce9116c9f07c91439e6d297ea72309f9 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 12:02:34 +0300 Subject: [PATCH 17/23] Removing test case --- .../acyclicvisitor/ConfigureForUnixVisitorTest.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java index 4346ffd30..449d242dc 100644 --- a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java @@ -62,14 +62,4 @@ public class ConfigureForUnixVisitorTest { assertThat(logger.getLoggingEvents()).extracting("level", "message").contains( tuple(INFO, zoom + " used with Unix configurator.")); } - - @Test - public void testVisitForHayes() { - ConfigureForUnixVisitor conUnix = new ConfigureForUnixVisitor(); - Hayes hayes = mock(Hayes.class); - - Assertions.assertThrows(ClassCastException.class, () -> { - ((HayesVisitor)conUnix).visit(hayes); - }); - } } From 8b1ed95d6b669c94d5b45b46a2e5d05234f597ad Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 12:14:35 +0300 Subject: [PATCH 18/23] Updating ConfigureForDosVisitorTest and ConfigureForUnixVisitorTest classes --- .../acyclicvisitor/ConfigureForDosVisitorTest.java | 8 ++++---- .../acyclicvisitor/ConfigureForUnixVisitorTest.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitorTest.java index 78d442caa..e8d6ba079 100644 --- a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitorTest.java +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitorTest.java @@ -49,9 +49,9 @@ public class ConfigureForDosVisitorTest { @Test public void testVisitForZoom() { ConfigureForDosVisitor conDos = new ConfigureForDosVisitor(); - Zoom zoom = mock(Zoom.class); + Zoom zoom = new Zoom(); - ((ZoomVisitor)conDos).visit(zoom); + conDos.visit(zoom); assertThat(logger.getLoggingEvents()).extracting("level", "message").contains( tuple(INFO, zoom + " used with Dos configurator.")); @@ -60,9 +60,9 @@ public class ConfigureForDosVisitorTest { @Test public void testVisitForHayes() { ConfigureForDosVisitor conDos = new ConfigureForDosVisitor(); - Hayes hayes = mock(Hayes.class); + Hayes hayes = new Hayes(); - ((HayesVisitor)conDos).visit(hayes); + conDos.visit(hayes); assertThat(logger.getLoggingEvents()).extracting("level", "message").contains( tuple(INFO, hayes + " used with Dos configurator.")); diff --git a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java index 449d242dc..0cee046a8 100644 --- a/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java +++ b/acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitorTest.java @@ -55,9 +55,9 @@ public class ConfigureForUnixVisitorTest { @Test public void testVisitForZoom() { ConfigureForUnixVisitor conUnix = new ConfigureForUnixVisitor(); - Zoom zoom = mock(Zoom.class); + Zoom zoom = new Zoom(); - ((ZoomVisitor)conUnix).visit(zoom); + conUnix.visit(zoom); assertThat(logger.getLoggingEvents()).extracting("level", "message").contains( tuple(INFO, zoom + " used with Unix configurator.")); From 6a0fa747ad6789ecff06069ab0d07e3dca4955f3 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 12:18:46 +0300 Subject: [PATCH 19/23] Fixing typos --- .../com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java | 2 +- .../com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java | 2 +- .../src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java index b71893474..4a33d26c1 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java @@ -26,7 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * CongigureForDosVisitor class implements both zoom's and hayes' visit method + * ConfigureForDosVisitor class implements both zoom's and hayes' visit method * for Dos manufacturer */ public class ConfigureForDosVisitor implements ModemVisitor, HayesVisitor, ZoomVisitor { diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java index 9e35ea0a6..d3ef3bf6c 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java @@ -26,7 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * CongigureForDosVisitor class implements both zoom's visit method for Unix + * ConfigureForUnixVisitor class implements zoom's visit method for Unix * manufacturer */ public class ConfigureForUnixVisitor implements ModemVisitor, ZoomVisitor { diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java index f5668756c..a9aaad6d4 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java @@ -23,7 +23,7 @@ package com.iluwatar.acyclicvisitor; /** - * ZoomVisitor interface + * ModemVisitor interface */ public interface ModemVisitor { // Visitor is a degenerate base class for all visitors. From 6636fb151b2620102733c8689ec0f2916d83ad6c Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 12:40:41 +0300 Subject: [PATCH 20/23] Adding AllModemVisitor interface --- .../acyclicvisitor/AllModemVisitor.java | 27 +++++++++++++++++++ .../ConfigureForDosVisitor.java | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java new file mode 100644 index 000000000..8a0c29b8e --- /dev/null +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java @@ -0,0 +1,27 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 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. + */ +package com.iluwatar.acyclicvisitor; + +public interface AllModemVisitor extends ModemVisitor, ZoomVisitor, HayesVisitor{ + +} diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java index 4a33d26c1..a6d66b1db 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java @@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory; * ConfigureForDosVisitor class implements both zoom's and hayes' visit method * for Dos manufacturer */ -public class ConfigureForDosVisitor implements ModemVisitor, HayesVisitor, ZoomVisitor { +public class ConfigureForDosVisitor implements AllModemVisitor { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); From 04d80f05c8e4ce5a9a2b0124a4011baf3c7215b1 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 17:56:14 +0300 Subject: [PATCH 21/23] Adding consequences in README.md --- acyclic-visitor/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/acyclic-visitor/README.md b/acyclic-visitor/README.md index 33c894ce7..939fe38b9 100644 --- a/acyclic-visitor/README.md +++ b/acyclic-visitor/README.md @@ -22,6 +22,16 @@ This pattern can be used: * When the visited class hierarchy will be frequently extended with new derivatives of the Element class. * When the recompilation, relinking, retesting or redistribution of the derivatives of Element is very expensive. +## Consequences +The good: +* No dependency cycles between class hierarchies. +* No need to recompile all the visitors if a new one is added. +* Does not cause compilation failure in existing visitors if class hierarchy has a new member. + +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. +* Parallel hierarchy of visitors has to be created for all members in visitable class hierarchy. + ## Related patterns * [Visitor Pattern](../visitor/README.md) From 51659fe9c55aa3aadd2fd7931da39f56e85ac95c Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 18:04:30 +0300 Subject: [PATCH 22/23] Updating HayesVisitor and ZoomVisitor --- .../src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java | 2 +- .../src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java index 90e8a2a1b..1731622f2 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java @@ -25,6 +25,6 @@ package com.iluwatar.acyclicvisitor; /** * HayesVisitor interface */ -public interface HayesVisitor { +public interface HayesVisitor extends ModemVisitor { void visit(Hayes hayes); } diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java index 85646921c..b4c949ed7 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java @@ -25,6 +25,6 @@ package com.iluwatar.acyclicvisitor; /** * ZoomVisitor interface */ -public interface ZoomVisitor { +public interface ZoomVisitor extends ModemVisitor{ void visit(Zoom zoom); } From 57f60c5ebfdbf538823c88323bc9841505dc3ec4 Mon Sep 17 00:00:00 2001 From: Argyro-Sioziou Date: Thu, 14 Jun 2018 18:30:46 +0300 Subject: [PATCH 23/23] Updating javadoc comments --- .../java/com/iluwatar/acyclicvisitor/AllModemVisitor.java | 3 +++ .../src/main/java/com/iluwatar/acyclicvisitor/App.java | 2 +- .../src/main/java/com/iluwatar/acyclicvisitor/Hayes.java | 2 +- .../main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java | 4 +++- .../src/main/java/com/iluwatar/acyclicvisitor/Zoom.java | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java index 8a0c29b8e..e6f583446 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java @@ -22,6 +22,9 @@ */ package com.iluwatar.acyclicvisitor; +/** + * All ModemVisitor interface extends all visitor interfaces + */ public interface AllModemVisitor extends ModemVisitor, ZoomVisitor, HayesVisitor{ } diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java index 97fdddf14..06e4bd2f2 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java @@ -30,7 +30,7 @@ package com.iluwatar.acyclicvisitor; *

* In this example the visitor base class is {@link ModemVisitor}. The base class of the * visited hierarchy is {@link Modem} and has two children {@link Hayes} and {@link Zoom} - * each one having its own visitor interface {@link Hayes} and {@link ZoomVisitor} + * each one having its own visitor interface {@link HayesVisitor} and {@link ZoomVisitor} * respectively. {@link ConfigureForUnixVisitor} and {@link ConfigureForDosVisitor} * implement each derivative's visit method only if it is required */ diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java index 657a669b0..1128057bf 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java @@ -33,7 +33,7 @@ public class Hayes extends Modem { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); /** - * Accept visitor + * Accepts all visitors but honors only HayesVisitor */ @Override public void accept(ModemVisitor modemVisitor) { diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java index a9aaad6d4..7189a6bba 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java @@ -23,7 +23,9 @@ package com.iluwatar.acyclicvisitor; /** - * ModemVisitor interface + * ModemVisitor interface does not contain any visit methods so that it does not + * depend on the visited hierarchy. Each derivative's visit method is declared in + * its own visitor interface */ public interface ModemVisitor { // Visitor is a degenerate base class for all visitors. diff --git a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java index f14c9e7e6..7091d79df 100644 --- a/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java +++ b/acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java @@ -33,7 +33,7 @@ public class Zoom extends Modem { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigureForDosVisitor.class); /** - * Accept visitor + * Accepts all visitors but honors only ZoomVisitor */ @Override public void accept(ModemVisitor modemVisitor) {