From 24f258848c67500d347f9cce051f27aecda48f97 Mon Sep 17 00:00:00 2001 From: shaiktaj Date: Thu, 25 May 2017 11:04:30 -0500 Subject: [PATCH 01/27] Updated ThreadSafeLazyLoadedivoryTower Added null check in private constructor to prevent instantiating by Reflection call --- .../iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java index 0b1b51b23..68f190d46 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java +++ b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java @@ -33,7 +33,12 @@ public final class ThreadSafeLazyLoadedIvoryTower { private static ThreadSafeLazyLoadedIvoryTower instance; - private ThreadSafeLazyLoadedIvoryTower() {} + private ThreadSafeLazyLoadedIvoryTower() { + // to prevent instantiating by Reflection call + if (instance != null) { + throw new IllegalStateException("Already initialized."); + } + } /** * The instance gets created only when it is called for first time. Lazy-loading From 0271e55983a27fd73ebe00a7ab87dac3b00ed611 Mon Sep 17 00:00:00 2001 From: "mahendran.mookkiah" Date: Sat, 5 Aug 2017 10:07:28 -0400 Subject: [PATCH 02/27] #587 SonarQube reports bugs --- .../model/view/presenter/FileLoader.java | 18 +++++++++++++++--- .../view/presenter/FileSelectorPresenter.java | 9 ++++++++- .../model/view/presenter/FileSelectorView.java | 4 +++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java index 01af677ae..f5606e638 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java @@ -25,6 +25,10 @@ package com.iluwatar.model.view.presenter; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; +import java.io.Serializable; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Every instance of this class represents the Model component in the Model-View-Presenter @@ -32,7 +36,14 @@ import java.io.FileReader; *

* It is responsible for reading and loading the contents of a given file. */ -public class FileLoader { +public class FileLoader implements Serializable{ + + /** + * Generated serial version UID + */ + private static final long serialVersionUID = -4745803872902019069L; + + private static final Logger LOGGER = LoggerFactory.getLogger(FileLoader.class); /** * Indicates if the file is loaded or not. @@ -48,7 +59,8 @@ public class FileLoader { * Loads the data of the file specified. */ public String loadData() { - try (BufferedReader br = new BufferedReader(new FileReader(new File(this.fileName)))) { + String dataFileName = this.fileName; + try (BufferedReader br = new BufferedReader(new FileReader(new File(dataFileName)))) { StringBuilder sb = new StringBuilder(); String line; @@ -60,7 +72,7 @@ public class FileLoader { return sb.toString(); } catch (Exception e) { - e.printStackTrace(); + LOGGER.error("File {} does not exist", dataFileName); } return null; diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorPresenter.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorPresenter.java index f2fefe8eb..560a8d274 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorPresenter.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorPresenter.java @@ -22,13 +22,20 @@ */ package com.iluwatar.model.view.presenter; +import java.io.Serializable; + /** * Every instance of this class represents the Presenter component in the Model-View-Presenter * architectural pattern. *

* It is responsible for reacting to the user's actions and update the View component. */ -public class FileSelectorPresenter { +public class FileSelectorPresenter implements Serializable{ + + /** + * Generated serial version UID + */ + private static final long serialVersionUID = 1210314339075855074L; /** * The View component that the presenter interacts with. diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorView.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorView.java index cfafadbab..5272ea0b7 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorView.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorView.java @@ -22,11 +22,13 @@ */ package com.iluwatar.model.view.presenter; +import java.io.Serializable; + /** * This interface represents the View component in the Model-View-Presenter pattern. It can be * implemented by either the GUI components, or by the Stub. */ -public interface FileSelectorView { +public interface FileSelectorView extends Serializable{ /** * Opens the view. From db10b937f2b07e8357ebb0b4eb02ca0972d83b25 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Wed, 9 Aug 2017 15:27:36 +0530 Subject: [PATCH 03/27] #348 - Data Tranfer Object : Added module to project. --- data-bus/pom.xml | 4 ++++ data-transfer-object/pom.xml | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 data-transfer-object/pom.xml diff --git a/data-bus/pom.xml b/data-bus/pom.xml index a77b59106..22b3f0229 100644 --- a/data-bus/pom.xml +++ b/data-bus/pom.xml @@ -27,6 +27,10 @@ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 + pom + + ../data-transfer-object + 1.16.14 diff --git a/data-transfer-object/pom.xml b/data-transfer-object/pom.xml new file mode 100644 index 000000000..c5bfc7fa8 --- /dev/null +++ b/data-transfer-object/pom.xml @@ -0,0 +1,16 @@ + + + + data-bus + com.iluwatar + 1.17.0-SNAPSHOT + ../data-bus/pom.xml + + 4.0.0 + + data-transfer-object + + + \ No newline at end of file From 67d4477d25698e08e8fd6fcf0ccf82de484a7304 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Thu, 10 Aug 2017 13:45:46 +0530 Subject: [PATCH 04/27] #348 - Data Tranfer Object : Add puml file to etc. --- data-transfer-object/etc/data-transfer-object.urm.puml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data-transfer-object/etc/data-transfer-object.urm.puml diff --git a/data-transfer-object/etc/data-transfer-object.urm.puml b/data-transfer-object/etc/data-transfer-object.urm.puml new file mode 100644 index 000000000..02af47ddf --- /dev/null +++ b/data-transfer-object/etc/data-transfer-object.urm.puml @@ -0,0 +1,2 @@ +@startuml +@enduml \ No newline at end of file From 148de06bb1f07efc91f745198762444ef7cf55ba Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Fri, 11 Aug 2017 15:42:21 +0530 Subject: [PATCH 05/27] #348 - Data Tranfer Object : Implement Data Transfer Object pattern simple version. --- .../iluwatar/datatransfer/CustomerDto.java | 60 ++++++++++++++ .../datatransfer/CustomerResource.java | 63 +++++++++++++++ .../datatransfer/CustomerResourceTest.java | 81 +++++++++++++++++++ 3 files changed, 204 insertions(+) create mode 100644 data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerDto.java create mode 100644 data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerResource.java create mode 100644 data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java diff --git a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerDto.java b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerDto.java new file mode 100644 index 000000000..ce9ffdb78 --- /dev/null +++ b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerDto.java @@ -0,0 +1,60 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2017 Gopinath Langote + * + * 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.datatransfer; + +/** + * {@link CustomerDto} is a data transfer object POJO. Instead of sending individual information to client + * We can send related information together in POJO. + *

+ * Dto will not have any business logic in it. + */ +public class CustomerDto { + private String id; + private String firstName; + private String lastName; + + /** + * @param id customer id + * @param firstName customer first name + * @param lastName customer last name + */ + public CustomerDto(String id, String firstName, String lastName) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + } + + public String getId() { + return id; + } + + public String getFirstName() { + return firstName; + } + + public String getLastName() { + return lastName; + } +} diff --git a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerResource.java b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerResource.java new file mode 100644 index 000000000..a4926d08c --- /dev/null +++ b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerResource.java @@ -0,0 +1,63 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2017 Gopinath Langote + * + * 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.datatransfer; + +import java.util.List; + +/** + * The resource class which serves customer information. + * This class act as server in the demo. Which has all customer details. + */ +public class CustomerResource { + private List customers; + + /** + * @param customers initialize resource with existing customers. Act as database. + */ + public CustomerResource(List customers) { + this.customers = customers; + } + + /** + * @return : all customers in list. + */ + public List getAllCustomers() { + return customers; + } + + /** + * @param customer save new customer to list. + */ + public void save(CustomerDto customer) { + customers.add(customer); + } + + /** + * @param customerId delete customer with id {@code customerId} + */ + public void delete(String customerId) { + customers.removeIf(customer -> customer.getId().equals(customerId)); + } +} \ No newline at end of file diff --git a/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java b/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java new file mode 100644 index 000000000..8d5c7b50f --- /dev/null +++ b/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java @@ -0,0 +1,81 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2017 Gopinath Langote + * + * 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.datatransfer; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +/** + * tests {@link CustomerResource}. + */ +public class CustomerResourceTest { + @Test + public void shouldGetAllCustomers() { + CustomerDto customer = new CustomerDto("1", "David", "Roy"); + List customers = new ArrayList<>(); + customers.add(customer); + + CustomerResource customerResource = new CustomerResource(customers); + + List allCustomers = customerResource.getAllCustomers(); + + assertEquals(allCustomers.size(), 1); + assertEquals(allCustomers.get(0).getId(), "1"); + assertEquals(allCustomers.get(0).getFirstName(), "David"); + assertEquals(allCustomers.get(0).getLastName(), "Roy"); + } + + @Test + public void shouldSaveCustomer() { + CustomerDto customer = new CustomerDto("1", "David", "Roy"); + CustomerResource customerResource = new CustomerResource(new ArrayList<>()); + + customerResource.save(customer); + + List allCustomers = customerResource.getAllCustomers(); + assertEquals(allCustomers.get(0).getId(), "1"); + assertEquals(allCustomers.get(0).getFirstName(), "David"); + assertEquals(allCustomers.get(0).getLastName(), "Roy"); + } + + @Test + public void shouldDeleteCustomer() { + CustomerDto customer = new CustomerDto("1", "David", "Roy"); + List customers = new ArrayList<>(); + customers.add(customer); + + CustomerResource customerResource = new CustomerResource(customers); + + customerResource.delete(customer.getId()); + + List allCustomers = customerResource.getAllCustomers(); + assertEquals(allCustomers.size(), 0); + } + +} \ No newline at end of file From 229fda9f3c0530e5a26380b77a12b86b702dd11b Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Fri, 11 Aug 2017 15:55:12 +0530 Subject: [PATCH 06/27] #348 - Data Tranfer Object : Add puml diagram. --- .../etc/data-transfer-object.urm.png | Bin 0 -> 14193 bytes .../etc/data-transfer-object.urm.puml | 19 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 data-transfer-object/etc/data-transfer-object.urm.png diff --git a/data-transfer-object/etc/data-transfer-object.urm.png b/data-transfer-object/etc/data-transfer-object.urm.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4377ee978dc37ff69d045d771583790062b8ea GIT binary patch literal 14193 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 + + CustomerResource(customers : List) + + delete(customerId : String) + + getAllCustomers() : List + + save(customer : CustomerDto) + } +} +CustomerResource --> "-customers" CustomerDto @enduml \ No newline at end of file From df9be7850490558e7e506961a24c4816765c37d4 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Fri, 11 Aug 2017 16:17:51 +0530 Subject: [PATCH 07/27] #348 - Data Tranfer Object : customer client request customer details to server at one shot. --- .../etc/data-transfer-object.urm.png | Bin 14193 -> 19132 bytes .../etc/data-transfer-object.urm.puml | 5 ++ .../datatransfer/CustomerClientApp.java | 78 ++++++++++++++++++ .../datatransfer/CustomerResourceTest.java | 14 ++-- 4 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java diff --git a/data-transfer-object/etc/data-transfer-object.urm.png b/data-transfer-object/etc/data-transfer-object.urm.png index 3c4377ee978dc37ff69d045d771583790062b8ea..46facff8dee4c45b2c6bbafb7ea6c3b6be80dfc3 100644 GIT binary patch literal 19132 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 R(&9dol~j_*6aUNm{{y~+`I`U$ literal 14193 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 {static} + } class CustomerDto { - firstName : String - id : String diff --git a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java new file mode 100644 index 000000000..3a9e8b88f --- /dev/null +++ b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java @@ -0,0 +1,78 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2017 Gopinath Langote + * + * 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.datatransfer; + +import java.util.ArrayList; +import java.util.List; + +/** + * The Data Transfer Object pattern is a design pattern in which an data transfer object is used to serve related + * information together to avoid multiple call for each piece of information. + *

+ * In this example, ({@link CustomerClientApp}) as as customer details consumer i.e. client to request for + * customer details to server. + *

+ * CustomerResource ({@link CustomerResource}) act as server to serve customer information. + * And The CustomerDto ({@link CustomerDto} is data transfer object to share customer information. + */ +public class CustomerClientApp { + /** + * Method as act client and request to server for details. + * + * @param args program argument. + */ + public static void main(String[] args) { + List customers = new ArrayList<>(); + CustomerDto customerOne = new CustomerDto("1", "Kelly", "Brown"); + CustomerDto customerTwo = new CustomerDto("2", "Alfonso", "Bass"); + customers.add(customerOne); + customers.add(customerTwo); + + CustomerResource customerResource = new CustomerResource(customers); + + System.out.println("All customers:-"); + List allCustomers = customerResource.getAllCustomers(); + printCustomerDetails(allCustomers); + + System.out.println("----------------------------------------------------------"); + + System.out.println("Deleting customer with id {1}"); + customerResource.delete(customerOne.getId()); + allCustomers = customerResource.getAllCustomers(); + printCustomerDetails(allCustomers); + + System.out.println("----------------------------------------------------------"); + + System.out.println("Adding customer three}"); + CustomerDto customerThree = new CustomerDto("3", "Lynda", "Blair"); + customerResource.save(customerThree); + allCustomers = customerResource.getAllCustomers(); + printCustomerDetails(allCustomers); + } + + private static void printCustomerDetails(List allCustomers) { + allCustomers.forEach(customer -> System.out.println(customer.getFirstName())); + } +} diff --git a/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java b/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java index 8d5c7b50f..adfe66b7d 100644 --- a/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java +++ b/data-transfer-object/src/test/java/com/iluwatar/datatransfer/CustomerResourceTest.java @@ -37,7 +37,7 @@ import static org.junit.Assert.assertEquals; public class CustomerResourceTest { @Test public void shouldGetAllCustomers() { - CustomerDto customer = new CustomerDto("1", "David", "Roy"); + CustomerDto customer = new CustomerDto("1", "Melody", "Yates"); List customers = new ArrayList<>(); customers.add(customer); @@ -47,26 +47,26 @@ public class CustomerResourceTest { assertEquals(allCustomers.size(), 1); assertEquals(allCustomers.get(0).getId(), "1"); - assertEquals(allCustomers.get(0).getFirstName(), "David"); - assertEquals(allCustomers.get(0).getLastName(), "Roy"); + assertEquals(allCustomers.get(0).getFirstName(), "Melody"); + assertEquals(allCustomers.get(0).getLastName(), "Yates"); } @Test public void shouldSaveCustomer() { - CustomerDto customer = new CustomerDto("1", "David", "Roy"); + CustomerDto customer = new CustomerDto("1", "Rita", "Reynolds"); CustomerResource customerResource = new CustomerResource(new ArrayList<>()); customerResource.save(customer); List allCustomers = customerResource.getAllCustomers(); assertEquals(allCustomers.get(0).getId(), "1"); - assertEquals(allCustomers.get(0).getFirstName(), "David"); - assertEquals(allCustomers.get(0).getLastName(), "Roy"); + assertEquals(allCustomers.get(0).getFirstName(), "Rita"); + assertEquals(allCustomers.get(0).getLastName(), "Reynolds"); } @Test public void shouldDeleteCustomer() { - CustomerDto customer = new CustomerDto("1", "David", "Roy"); + CustomerDto customer = new CustomerDto("1", "Terry", "Nguyen"); List customers = new ArrayList<>(); customers.add(customer); From bfbc8fd740f74739017cd95008a16146e5484217 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Fri, 11 Aug 2017 16:51:46 +0530 Subject: [PATCH 08/27] #348 - Data Tranfer Object : Add readme.md --- data-transfer-object/README.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 data-transfer-object/README.md diff --git a/data-transfer-object/README.md b/data-transfer-object/README.md new file mode 100644 index 000000000..ad9b9f4e2 --- /dev/null +++ b/data-transfer-object/README.md @@ -0,0 +1,30 @@ +--- +layout: pattern +title: Data Transfer Object +folder: data-transfer-object +permalink: /patterns/data-transfer-object/ +categories: Architectural +tags: + - Java + - KISS + - YAGNI + - Difficulty-Beginner +--- + +## Intent +Pass data with multiple attributes in one shot from client to server, +to avoid multiple calls to remote server. + +![alt text](./etc/data-transfer-object.urm.png "data-transfer-object") + +## Applicability +Use the Data Transfer Object pattern when + +* The client is asking for multiple information. And the information is related. +* When you want to boost the performance to get resources. +* You want reduced number of remote calls. + +## Credits + +* [Design Pattern - Transfer Object Pattern](https://www.tutorialspoint.com/design_pattern/transfer_object_pattern.htm) +* [Data Transfer Object](https://msdn.microsoft.com/en-us/library/ff649585.aspx) From 746e452c2bfbb623df0285a53793cf791f3539f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 12 Aug 2017 18:20:45 +0300 Subject: [PATCH 09/27] #590 Add new presentation for Singleton --- singleton/README.md | 29 ++++++++- singleton/etc/singleton.png | Bin 22292 -> 0 bytes singleton/etc/singleton.ucls | 104 ------------------------------- singleton/etc/singleton.urm.puml | 43 ------------- singleton/etc/singleton_1.png | Bin 16417 -> 0 bytes 5 files changed, 27 insertions(+), 149 deletions(-) delete mode 100644 singleton/etc/singleton.png delete mode 100644 singleton/etc/singleton.ucls delete mode 100644 singleton/etc/singleton.urm.puml delete mode 100644 singleton/etc/singleton_1.png diff --git a/singleton/README.md b/singleton/README.md index 4032ffaed..0a81ba0fc 100644 --- a/singleton/README.md +++ b/singleton/README.md @@ -15,7 +15,32 @@ tags: Ensure a class only has one instance, and provide a global point of access to it. -![alt text](./etc/singleton_1.png "Singleton") + +## Explanation +Real world example +> There can only be one ivory tower where the wizards study their magic. The same enchanted ivory tower is always used by the wizards. Ivory tower here is singleton. + +In plain words +> Ensures that only one object of a particular class is ever created. + +Wikipedia says +> In software engineering, the singleton pattern is a software design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system. + +**Programmatic Example** + +Joshua Bloch, Effective Java 2nd Edition p.18 +> A single-element enum type is the best way to implement a singleton +``` +public enum EnumIvoryTower { + INSTANCE; +} +``` +Then in order to use +``` +EnumIvoryTower enumIvoryTower1 = EnumIvoryTower.INSTANCE; +EnumIvoryTower enumIvoryTower2 = EnumIvoryTower.INSTANCE; +assertEquals(enumIvoryTower1, enumIvoryTower2); // true +``` ## Applicability Use the Singleton pattern when @@ -40,7 +65,7 @@ Use the Singleton pattern when * Violates Single Responsibility Principle (SRP) by controlling their own creation and lifecycle. * Encourages using a global shared instance which prevents an object and resources used by this object from being deallocated. -* Creates tightly coupled code that is difficult to test. +* Creates tightly coupled code. The clients of the Singleton become difficult to test. * Makes it almost impossible to subclass a Singleton. ## Credits diff --git a/singleton/etc/singleton.png b/singleton/etc/singleton.png deleted file mode 100644 index 0bf0c9b283b751a3b32179e3e7bd3e2927ff49db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22292 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

WR8<5D*{^GczS48yE-=>C)RQClp=7 zov}X|P|9jI6}phh2Re|g=evBWTF@Euv~$EX&J?BFe(?q3$U=p~ALVSi?b@>bDH8EA z4r|y@{YFwbsQTq~HwJF@UE3wo!!ItRPS5b$ng&?KlIKLvvTJ#T$tE{IGbq#hOOb{C zc4X)>YsevJ$kYB(t>?N8_I8(-)XD=VK3$s#9erCH+VGYfg)gYSdNYJSCJsZJkhC~X zw>X?8nqZTTOK%uxaxsdIyNEBQZ$s3|i8a99qh~vWLa@Fb)%INA)fu3^{O@%Jj;5fo z&*@5KQ6};o-MIF9S|@2C#vvP=$35Psm}lJ55^IQKq5~QV^2&6^U!kS9wHj6 zA_DsYzrSGNcTe3VN{+`$|C3ryFQpq}FqbyL$rZ@B?DKxgHr!8GZ-hRZm@Ny=^R1Me z8N;4|R(N(DrAC-vR|agMuWB%?mDk>y?VRbV+_L^>qcVYu9a|XK5z_d*s@^If!Lr7iLl&NFc0n+DUcLE}c9v8;gH9yqyIJQ__ zKW};zu~^pAEqx6kHhxLv%qhe@;V(&JTpL{oUkSVMO{NLY)kee1MxN)%b6tYva7Yc3 zLj`%t7}i=LWUk+lXb9dyo$t*W;852Sq(Z-R3|}>JI~V4678$0y&ib8zQY8OMS*KoZ(ZC&OUh7U_U>uI ztf#5;(H(_dj){b*kDHpuJjXEF7(qYj2?U;eS*NoZj<)jnnAkjCU1z9{z_?yF;btKP!#o!n%OvR6rEud_>1CWuBM#G8y;=0+ zW4gR^sEy)?`n^+lhD+KGJnTV5AOX<|U7dGR^RyemHh7*zi5Pn9WQ5t$!`*L`#;*o+ z-B@_+*0?p#)vlHNTK+a$9q!Bq>g@K4iG?_cb}&leqLZOD9-En}y2V!hl1BV;m7;o- zNKmRO>ds}GWY<}mk^o6Tf0BB2khZHa%G4}7w3)Y!#}}3iwRDUib+0Z&;zR(9aBiT~ zhU7nLjn({k7Us^=g8vMle~)soZcLv2M%bqhaGNCqM;IT%z8S!MMYCT;ffZtvE8v%F z?u8(jef|oo9i#I>117xh|5@;8C`!U}F1>5zyrAvNU8oz)nD6Rt@o;-;@r4ajndDOo z^}4b|{Kp!_aEU^a6bqIw*Xotr7=nmL-K{Puuq0PQ(@Jyg#&M(a;)7y-*2N{|q~9+V zypx&%70=FSF#%VK6xW(;DuUlQEd)hdDIS4t<>)PAdL~ZD;Y~*HFw`QTxX;{7u$W0s zG0%=#+4cxJ`h;&kB7)oDHM|5NgP}eWVN;;!RMHHS@aDM0n(% z(+SxwO4-{-$&$}KK_%zoC4SJ{=W~Op#@iAD`|*(U+6bxcp)8Q6Ca=Fb} zj3K3pm=K^8k4_jnFl${qL7(J7uhcEm=BiGUS? zhH#kIj=a`Amt`!ou$q(d4*Um#o2w&g?XLTN(~^CMjC!x(Yr=0k7(0xw-CB=%=3t^0 zy^~Ts9<@(ura34RmQ}~9BfW|C4w*_tbosK`v7K{7IURlue=bq&C_ze;gx1QpylCLu zh|zTJtM2z>&^1pP(^At4B*E6pDryexhP;6z$OZV=&`lXiH*fnA7O<5OqAtx)L2n_$1WC)P2igZTeO-r;JL4qErWf5AP&NO#tl$@>Y z;05h0NO|Fn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/singleton/etc/singleton.urm.puml b/singleton/etc/singleton.urm.puml deleted file mode 100644 index f61377e17..000000000 --- a/singleton/etc/singleton.urm.puml +++ /dev/null @@ -1,43 +0,0 @@ -@startuml -package com.iluwatar.singleton { - class App { - - LOGGER : Logger {static} - + App() - + main(args : String[]) {static} - } - enum EnumIvoryTower { - + INSTANCE {static} - + toString() : String - + valueOf(name : String) : EnumIvoryTower {static} - + values() : EnumIvoryTower[] {static} - } - class InitializingOnDemandHolderIdiom { - - InitializingOnDemandHolderIdiom() - + getInstance() : InitializingOnDemandHolderIdiom {static} - } - -class HelperHolder { - - INSTANCE : InitializingOnDemandHolderIdiom {static} - - HelperHolder() - } - class IvoryTower { - - INSTANCE : IvoryTower {static} - - IvoryTower() - + getInstance() : IvoryTower {static} - } - class ThreadSafeDoubleCheckLocking { - - instance : ThreadSafeDoubleCheckLocking {static} - - ThreadSafeDoubleCheckLocking() - + getInstance() : ThreadSafeDoubleCheckLocking {static} - } - class ThreadSafeLazyLoadedIvoryTower { - - instance : ThreadSafeLazyLoadedIvoryTower {static} - - ThreadSafeLazyLoadedIvoryTower() - + getInstance() : ThreadSafeLazyLoadedIvoryTower {static} - } -} -IvoryTower --> "-INSTANCE" IvoryTower -ThreadSafeDoubleCheckLocking --> "-instance" ThreadSafeDoubleCheckLocking -ThreadSafeLazyLoadedIvoryTower --> "-instance" ThreadSafeLazyLoadedIvoryTower -HelperHolder ..+ InitializingOnDemandHolderIdiom -HelperHolder --> "-INSTANCE" InitializingOnDemandHolderIdiom -@enduml \ No newline at end of file diff --git a/singleton/etc/singleton_1.png b/singleton/etc/singleton_1.png deleted file mode 100644 index 58dc440a9ca9167260bc6b81f7b710213d046e1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16417 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 From 2150a2bb55f9116bcb16c391d0018d269a741abe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 12 Aug 2017 18:42:14 +0300 Subject: [PATCH 10/27] #590 Skip puml processing for singleton module --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 4f4b5dee6..0ea198c3f 100644 --- a/pom.xml +++ b/pom.xml @@ -460,6 +460,7 @@ java-design-patterns + singleton From 002774b5aa8db75f53fc5205d8bd14977d077f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 12 Aug 2017 19:24:55 +0300 Subject: [PATCH 11/27] Fix Travis out of memory error --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 817b6635f..a2aaf764b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,4 +36,4 @@ notifications: on_failure: always # options: [always|never|change] default: always on_start: never # options: [always|never|change] default: always -sudo: false # route the build to the container-based infrastructure for a faster build +sudo: required \ No newline at end of file From 2d750dc0fdfc848e67d5f9a8524b5a19817401e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 12 Aug 2017 20:02:14 +0300 Subject: [PATCH 12/27] #590 Alter Factory Method presentation --- factory-method/README.md | 41 +++++++- factory-method/etc/factory-method.png | Bin 22316 -> 0 bytes factory-method/etc/factory-method.ucls | 117 --------------------- factory-method/etc/factory-method.urm.puml | 54 ---------- factory-method/etc/factory-method_1.png | Bin 47622 -> 0 bytes pom.xml | 1 + 6 files changed, 41 insertions(+), 172 deletions(-) delete mode 100644 factory-method/etc/factory-method.png delete mode 100644 factory-method/etc/factory-method.ucls delete mode 100644 factory-method/etc/factory-method.urm.puml delete mode 100644 factory-method/etc/factory-method_1.png diff --git a/factory-method/README.md b/factory-method/README.md index 17e0818e9..de3a9dd8c 100644 --- a/factory-method/README.md +++ b/factory-method/README.md @@ -19,7 +19,46 @@ Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. -![alt text](./etc/factory-method_1.png "Factory Method") +## Explanation + +Real world example +> Blacksmith manufactures weapons. Elves require Elvish weapons and orcs require Orcish weapons. Depending on the customer at hand the right type of blacksmith is summoned. + +In plain words +> It provides a way to delegate the instantiation logic to child classes. + +Wikipedia says +> In class-based programming, the factory method pattern is a creational pattern that uses factory methods to deal with the problem of creating objects without having to specify the exact class of the object that will be created. This is done by creating objects by calling a factory method—either specified in an interface and implemented by child classes, or implemented in a base class and optionally overridden by derived classes—rather than by calling a constructor. + + **Programmatic Example** + +Taking our blacksmith example above. First of all we have a blacksmith interface and some implementations for it + +``` +public interface Blacksmith { + Weapon manufactureWeapon(WeaponType weaponType); +} + +public class ElfBlacksmith implements Blacksmith { + public Weapon manufactureWeapon(WeaponType weaponType) { + return new ElfWeapon(weaponType); + } +} + +public class OrcBlacksmith implements Blacksmith { + public Weapon manufactureWeapon(WeaponType weaponType) { + return new OrcWeapon(weaponType); + } +} +``` + +Now as the customers come the correct type of blacksmith is summoned and requested weapons are manufactured +``` +Blacksmith blacksmith = new ElfBlacksmith(); +blacksmith.manufactureWeapon(WeaponType.SPEAR); +blacksmith.manufactureWeapon(WeaponType.AXE); +// Elvish weapons are created +``` ## Applicability Use the Factory Method pattern when diff --git a/factory-method/etc/factory-method.png b/factory-method/etc/factory-method.png deleted file mode 100644 index c2edfd6484ea802895f57e08797c0172bedb0f1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22316 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 JtBW^6{|~uX4SWCq diff --git a/factory-method/etc/factory-method.ucls b/factory-method/etc/factory-method.ucls deleted file mode 100644 index 562437995..000000000 --- a/factory-method/etc/factory-method.ucls +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/factory-method/etc/factory-method.urm.puml b/factory-method/etc/factory-method.urm.puml deleted file mode 100644 index 73a05e178..000000000 --- a/factory-method/etc/factory-method.urm.puml +++ /dev/null @@ -1,54 +0,0 @@ -@startuml -package com.iluwatar.factory.method { - class App { - - LOGGER : Logger {static} - - blacksmith : Blacksmith - + App(blacksmith : Blacksmith) - + main(args : String[]) {static} - - manufactureWeapons() - } - interface Blacksmith { - + manufactureWeapon(WeaponType) : Weapon {abstract} - } - class ElfBlacksmith { - + ElfBlacksmith() - + manufactureWeapon(weaponType : WeaponType) : Weapon - } - class ElfWeapon { - - weaponType : WeaponType - + ElfWeapon(weaponType : WeaponType) - + getWeaponType() : WeaponType - + toString() : String - } - class OrcBlacksmith { - + OrcBlacksmith() - + manufactureWeapon(weaponType : WeaponType) : Weapon - } - class OrcWeapon { - - weaponType : WeaponType - + OrcWeapon(weaponType : WeaponType) - + getWeaponType() : WeaponType - + toString() : String - } - interface Weapon { - + getWeaponType() : WeaponType {abstract} - } - enum WeaponType { - + AXE {static} - + SHORT_SWORD {static} - + SPEAR {static} - + UNDEFINED {static} - - title : String - + toString() : String - + valueOf(name : String) : WeaponType {static} - + values() : WeaponType[] {static} - } -} -ElfWeapon --> "-weaponType" WeaponType -OrcWeapon --> "-weaponType" WeaponType -App --> "-blacksmith" Blacksmith -ElfBlacksmith ..|> Blacksmith -ElfWeapon ..|> Weapon -OrcBlacksmith ..|> Blacksmith -OrcWeapon ..|> Weapon -@enduml \ No newline at end of file diff --git a/factory-method/etc/factory-method_1.png b/factory-method/etc/factory-method_1.png deleted file mode 100644 index 6b9276781be2e1f498f590a7877a6434204caa41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47622 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 E0=f?*lK=n! diff --git a/pom.xml b/pom.xml index 0ea198c3f..7f96043f5 100644 --- a/pom.xml +++ b/pom.xml @@ -461,6 +461,7 @@ java-design-patterns singleton + factory-method From fba30e59ee8f0a82c577493ed0b2089ae4afae6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 12 Aug 2017 21:44:21 +0300 Subject: [PATCH 13/27] #590 Kramdown fixes --- factory-method/README.md | 5 ++++- singleton/README.md | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/factory-method/README.md b/factory-method/README.md index de3a9dd8c..07c92d0e5 100644 --- a/factory-method/README.md +++ b/factory-method/README.md @@ -20,14 +20,16 @@ decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. ## Explanation - Real world example + > Blacksmith manufactures weapons. Elves require Elvish weapons and orcs require Orcish weapons. Depending on the customer at hand the right type of blacksmith is summoned. In plain words + > It provides a way to delegate the instantiation logic to child classes. Wikipedia says + > In class-based programming, the factory method pattern is a creational pattern that uses factory methods to deal with the problem of creating objects without having to specify the exact class of the object that will be created. This is done by creating objects by calling a factory method—either specified in an interface and implemented by child classes, or implemented in a base class and optionally overridden by derived classes—rather than by calling a constructor. **Programmatic Example** @@ -53,6 +55,7 @@ public class OrcBlacksmith implements Blacksmith { ``` Now as the customers come the correct type of blacksmith is summoned and requested weapons are manufactured + ``` Blacksmith blacksmith = new ElfBlacksmith(); blacksmith.manufactureWeapon(WeaponType.SPEAR); diff --git a/singleton/README.md b/singleton/README.md index 0a81ba0fc..1be304d8e 100644 --- a/singleton/README.md +++ b/singleton/README.md @@ -18,24 +18,31 @@ access to it. ## Explanation Real world example + > There can only be one ivory tower where the wizards study their magic. The same enchanted ivory tower is always used by the wizards. Ivory tower here is singleton. In plain words + > Ensures that only one object of a particular class is ever created. Wikipedia says + > In software engineering, the singleton pattern is a software design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system. **Programmatic Example** Joshua Bloch, Effective Java 2nd Edition p.18 + > A single-element enum type is the best way to implement a singleton + ``` public enum EnumIvoryTower { INSTANCE; } ``` + Then in order to use + ``` EnumIvoryTower enumIvoryTower1 = EnumIvoryTower.INSTANCE; EnumIvoryTower enumIvoryTower2 = EnumIvoryTower.INSTANCE; From 37b9d45a7404c76e8977757f57455092a35885c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sun, 13 Aug 2017 10:09:26 +0300 Subject: [PATCH 14/27] #590 Add explanation for Abstract Factory --- abstract-factory/README.md | 105 +++++++++++- abstract-factory/etc/abstract-factory.png | Bin 21644 -> 0 bytes abstract-factory/etc/abstract-factory.ucls | 159 ------------------ .../etc/abstract-factory.urm.puml | 89 ---------- abstract-factory/etc/abstract-factory_1.png | Bin 58331 -> 0 bytes pom.xml | 1 + 6 files changed, 102 insertions(+), 252 deletions(-) delete mode 100644 abstract-factory/etc/abstract-factory.png delete mode 100644 abstract-factory/etc/abstract-factory.ucls delete mode 100644 abstract-factory/etc/abstract-factory.urm.puml delete mode 100644 abstract-factory/etc/abstract-factory_1.png diff --git a/abstract-factory/README.md b/abstract-factory/README.md index f153c1202..c049401fc 100644 --- a/abstract-factory/README.md +++ b/abstract-factory/README.md @@ -18,7 +18,107 @@ Kit Provide an interface for creating families of related or dependent objects without specifying their concrete classes. -![alt text](./etc/abstract-factory_1.png "Abstract Factory") +## 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. + +In plain words + +> A factory of factories; a factory that groups the individual but related/dependent factories together without specifying their concrete classes. + +Wikipedia says + +> The abstract factory pattern provides a way to encapsulate a group of individual factories that have a common theme without specifying their concrete classes + +**Programmatic Example** + +Translating the kingdom example above. First of all we have some interfaces and implementation for the objects in the kingdom + +``` +public interface Castle { + String getDescription(); +} +public interface King { + String getDescription(); +} +public interface Army { + String getDescription(); +} + +// Elven implementations -> +public class ElfCastle implements Castle { + static final String DESCRIPTION = "This is the Elven castle!"; + @Override + public String getDescription() { + return DESCRIPTION; + } +} +public class ElfKing implements King { + static final String DESCRIPTION = "This is the Elven king!"; + @Override + public String getDescription() { + return DESCRIPTION; + } +} +public class ElfArmy implements Army { + static final String DESCRIPTION = "This is the Elven Army!"; + @Override + public String getDescription() { + return DESCRIPTION; + } +} + +// Orcish implementations similarly... + +``` + +Then we have the abstraction and implementations for the kingdom factory + +``` +public interface KingdomFactory { + Castle createCastle(); + King createKing(); + Army createArmy(); +} + +public class ElfKingdomFactory implements KingdomFactory { + public Castle createCastle() { + return new ElfCastle(); + } + public King createKing() { + return new ElfKing(); + } + public Army createArmy() { + return new ElfArmy(); + } +} + +public class OrcKingdomFactory implements KingdomFactory { + public Castle createCastle() { + return new OrcCastle(); + } + public King createKing() { + return new OrcKing(); + } + public Army createArmy() { + return new OrcArmy(); + } +} +``` + +Now we have our abstract factory that lets us make family of related objects i.e. Elven kingdom factory creates Elven castle, king and army etc. + +``` +KingdomFactory factory = new ElfKingdomFactory(); +Castle castle = factory.createCastle(); +King king = factory.createKing(); +Army 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! +``` ## Applicability Use the Abstract Factory pattern when @@ -41,9 +141,6 @@ Use the Abstract Factory pattern when * Dependency injection in java hides the service class dependencies that can lead to runtime errors that would have been caught at compile time. - - - ## Real world examples * [javax.xml.parsers.DocumentBuilderFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilderFactory.html) diff --git a/abstract-factory/etc/abstract-factory.png b/abstract-factory/etc/abstract-factory.png deleted file mode 100644 index c709276b662b0006412938e5b675628d48e92840..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21644 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 diff --git a/abstract-factory/etc/abstract-factory.ucls b/abstract-factory/etc/abstract-factory.ucls deleted file mode 100644 index bdf1e1510..000000000 --- a/abstract-factory/etc/abstract-factory.ucls +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/abstract-factory/etc/abstract-factory.urm.puml b/abstract-factory/etc/abstract-factory.urm.puml deleted file mode 100644 index 7b5e1b701..000000000 --- a/abstract-factory/etc/abstract-factory.urm.puml +++ /dev/null @@ -1,89 +0,0 @@ -@startuml -package com.iluwatar.abstractfactory { - class App { - - LOGGER : Logger {static} - - army : Army - - castle : Castle - - king : King - + App() - + createKingdom(factory : KingdomFactory) - + getArmy() : Army - ~ getArmy(factory : KingdomFactory) : Army - + getCastle() : Castle - ~ getCastle(factory : KingdomFactory) : Castle - + getKing() : King - ~ getKing(factory : KingdomFactory) : King - + main(args : String[]) {static} - - setArmy(army : Army) - - setCastle(castle : Castle) - - setKing(king : King) - } - interface Army { - + getDescription() : String {abstract} - } - interface Castle { - + getDescription() : String {abstract} - } - class ElfArmy { - ~ DESCRIPTION : String {static} - + ElfArmy() - + getDescription() : String - } - class ElfCastle { - ~ DESCRIPTION : String {static} - + ElfCastle() - + getDescription() : String - } - class ElfKing { - ~ DESCRIPTION : String {static} - + ElfKing() - + getDescription() : String - } - class ElfKingdomFactory { - + ElfKingdomFactory() - + createArmy() : Army - + createCastle() : Castle - + createKing() : King - } - interface King { - + getDescription() : String {abstract} - } - interface KingdomFactory { - + createArmy() : Army {abstract} - + createCastle() : Castle {abstract} - + createKing() : King {abstract} - } - class OrcArmy { - ~ DESCRIPTION : String {static} - + OrcArmy() - + getDescription() : String - } - class OrcCastle { - ~ DESCRIPTION : String {static} - + OrcCastle() - + getDescription() : String - } - class OrcKing { - ~ DESCRIPTION : String {static} - + OrcKing() - + getDescription() : String - } - class OrcKingdomFactory { - + OrcKingdomFactory() - + createArmy() : Army - + createCastle() : Castle - + createKing() : King - } -} -App --> "-castle" Castle -App --> "-king" King -App --> "-army" Army -ElfArmy ..|> Army -ElfCastle ..|> Castle -ElfKing ..|> King -ElfKingdomFactory ..|> KingdomFactory -OrcArmy ..|> Army -OrcCastle ..|> Castle -OrcKing ..|> King -OrcKingdomFactory ..|> KingdomFactory -@enduml \ No newline at end of file diff --git a/abstract-factory/etc/abstract-factory_1.png b/abstract-factory/etc/abstract-factory_1.png deleted file mode 100644 index 5990edd831264f2084ee888ddba7447707622726..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58331 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 Du-~w* diff --git a/pom.xml b/pom.xml index 7f96043f5..79bb7e533 100644 --- a/pom.xml +++ b/pom.xml @@ -462,6 +462,7 @@ java-design-patterns singleton factory-method + abstract-factory From a1a40880873bc40f977a3cef7d5b9f45c70c9312 Mon Sep 17 00:00:00 2001 From: "mahendran.mookkiah" Date: Sun, 13 Aug 2017 10:19:48 -0400 Subject: [PATCH 15/27] =?UTF-8?q?As=20getAll=20method=20returns=20a=20Stre?= =?UTF-8?q?am,=20we=20cannot=20close=20the=20involved=20resources=20(Conne?= =?UTF-8?q?ction,=20Statement=20and=20resultSet)=20until=20the=20stream=20?= =?UTF-8?q?is=20closed=20by=20the=20consumer.=20So=20try-with-resources=20?= =?UTF-8?q?is=20not=20an=20option=20as=20per=20sonarqube=E2=80=99s=20recom?= =?UTF-8?q?mendation.=20But=20it=20is=20still=20recommended=20to=20close?= =?UTF-8?q?=20statement=20and=20result=20set.=20When=20connection=20pool?= =?UTF-8?q?=20used,=20connection=20is=20not=20closed=20when=20close()=20ca?= =?UTF-8?q?lled.=20It=20is=20just=20returned=20to=20the=20pool.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Using //NOSONAR to avoid false blocker issue. --- dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java index c5dc7da3f..6e93207cc 100644 --- a/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java @@ -65,8 +65,8 @@ public class DbCustomerDao implements CustomerDao { Connection connection; try { connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS"); - ResultSet resultSet = statement.executeQuery(); + PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS"); //NOSONAR + ResultSet resultSet = statement.executeQuery(); //NOSONAR return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE, Spliterator.ORDERED) { @@ -82,7 +82,7 @@ public class DbCustomerDao implements CustomerDao { throw new RuntimeException(e); } } - }, false).onClose(() -> mutedClose(connection)); + }, false).onClose(() -> mutedClose(connection, statement, resultSet)); } catch (SQLException e) { throw new Exception(e.getMessage(), e); } @@ -92,8 +92,10 @@ public class DbCustomerDao implements CustomerDao { return dataSource.getConnection(); } - private void mutedClose(Connection connection) { + private void mutedClose(Connection connection, PreparedStatement statement, ResultSet resultSet) { try { + resultSet.close(); + statement.close(); connection.close(); } catch (SQLException e) { e.printStackTrace(); From f6c8bfbc3950474999ada3488c60d09d0dba2216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sun, 13 Aug 2017 17:34:05 +0300 Subject: [PATCH 16/27] #590 Add explanation for Builder --- builder/README.md | 98 ++++++++++++++++++++- builder/etc/builder.png | Bin 53747 -> 0 bytes builder/etc/builder.ucls | 162 ----------------------------------- builder/etc/builder.urm.puml | 100 --------------------- builder/etc/builder_1.png | Bin 106529 -> 0 bytes pom.xml | 1 + 6 files changed, 98 insertions(+), 263 deletions(-) delete mode 100644 builder/etc/builder.png delete mode 100644 builder/etc/builder.ucls delete mode 100644 builder/etc/builder.urm.puml delete mode 100644 builder/etc/builder_1.png diff --git a/builder/README.md b/builder/README.md index 335862676..d255ec2f6 100644 --- a/builder/README.md +++ b/builder/README.md @@ -16,7 +16,103 @@ Separate the construction of a complex object from its representation so that the same construction process can create different representations. -![alt text](./etc/builder_1.png "Builder") +## Explanation + +Real world example + +> Imagine a character generator for a role playing game. The easiest option is to let computer create the character for you. But if you want to select the character details like profession, gender, hair color etc. the character generation becomes a step-by-step process that completes when all the selections are ready. + +In plain words + +> Allows you to create different flavors of an object while avoiding constructor pollution. Useful when there could be several flavors of an object. Or when there are a lot of steps involved in creation of an object. + +Wikipedia says + +> The builder pattern is an object creation software design pattern with the intentions of finding a solution to the telescoping constructor anti-pattern. + +Having said that let me add a bit about what telescoping constructor anti-pattern is. At one point or the other we have all seen a constructor like below: + +``` +public Hero(Profession profession, String name, HairType hairType, HairColor hairColor, Armor armor, Weapon weapon) { +} +``` + +As you can see the number of constructor parameters can quickly get out of hand and it might become difficult to understand the arrangement of parameters. Plus this parameter list could keep on growing if you would want to add more options in future. This is called telescoping constructor anti-pattern. + +**Programmatic Example** + +The sane alternative is to use the Builder pattern. First of all we have our hero that we want to create + +``` +public final class Hero { + private final Profession profession; + private final String name; + private final HairType hairType; + private final HairColor hairColor; + private final Armor armor; + private final Weapon weapon; + + private Hero(Builder builder) { + this.profession = builder.profession; + this.name = builder.name; + this.hairColor = builder.hairColor; + this.hairType = builder.hairType; + this.weapon = builder.weapon; + this.armor = builder.armor; + } +} +``` + +And then we have the builder + +``` + public static class Builder { + private final Profession profession; + private final String name; + private HairType hairType; + private HairColor hairColor; + private Armor armor; + private Weapon weapon; + + public Builder(Profession profession, String name) { + if (profession == null || name == null) { + throw new IllegalArgumentException("profession and name can not be null"); + } + this.profession = profession; + this.name = name; + } + + public Builder withHairType(HairType hairType) { + this.hairType = hairType; + return this; + } + + public Builder withHairColor(HairColor hairColor) { + this.hairColor = hairColor; + return this; + } + + public Builder withArmor(Armor armor) { + this.armor = armor; + return this; + } + + public Builder withWeapon(Weapon weapon) { + this.weapon = weapon; + return this; + } + + public Hero build() { + return new Hero(this); + } + } +``` + +And then it can be used as: + +``` +Hero mage = new Hero.Builder(Profession.MAGE, "Riobard").withHairColor(HairColor.BLACK).withWeapon(Weapon.DAGGER).build(); +``` ## Applicability Use the Builder pattern when diff --git a/builder/etc/builder.png b/builder/etc/builder.png deleted file mode 100644 index a0280ba53f7d29a15f93436403cd4d48e9c4bcf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53747 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 >6^@T4=dor1yBM13Kd$O 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 diff --git a/builder/etc/builder.ucls b/builder/etc/builder.ucls deleted file mode 100644 index 073c5cea7..000000000 --- a/builder/etc/builder.ucls +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/builder/etc/builder.urm.puml b/builder/etc/builder.urm.puml deleted file mode 100644 index df8d73f36..000000000 --- a/builder/etc/builder.urm.puml +++ /dev/null @@ -1,100 +0,0 @@ -@startuml -package com.iluwatar.builder { - class App { - - LOGGER : Logger {static} - + App() - + main(args : String[]) {static} - } - enum Armor { - + CHAIN_MAIL {static} - + CLOTHES {static} - + LEATHER {static} - + PLATE_MAIL {static} - - title : String - + toString() : String - + valueOf(name : String) : Armor {static} - + values() : Armor[] {static} - } - enum HairColor { - + BLACK {static} - + BLOND {static} - + BROWN {static} - + RED {static} - + WHITE {static} - + toString() : String - + valueOf(name : String) : HairColor {static} - + values() : HairColor[] {static} - } - enum HairType { - + BALD {static} - + CURLY {static} - + LONG_CURLY {static} - + LONG_STRAIGHT {static} - + SHORT {static} - - title : String - + toString() : String - + valueOf(name : String) : HairType {static} - + values() : HairType[] {static} - } - class Hero { - - armor : Armor - - hairColor : HairColor - - hairType : HairType - - name : String - - profession : Profession - - weapon : Weapon - - Hero(builder : Builder) - + getArmor() : Armor - + getHairColor() : HairColor - + getHairType() : HairType - + getName() : String - + getProfession() : Profession - + getWeapon() : Weapon - + toString() : String - } - class Builder { - - armor : Armor - - hairColor : HairColor - - hairType : HairType - - name : String - - profession : Profession - - weapon : Weapon - + Builder(profession : Profession, name : String) - + build() : Hero - + withArmor(armor : Armor) : Builder - + withHairColor(hairColor : HairColor) : Builder - + withHairType(hairType : HairType) : Builder - + withWeapon(weapon : Weapon) : Builder - } - enum Profession { - + MAGE {static} - + PRIEST {static} - + THIEF {static} - + WARRIOR {static} - + toString() : String - + valueOf(name : String) : Profession {static} - + values() : Profession[] {static} - } - enum Weapon { - + AXE {static} - + BOW {static} - + DAGGER {static} - + SWORD {static} - + WARHAMMER {static} - + toString() : String - + valueOf(name : String) : Weapon {static} - + values() : Weapon[] {static} - } -} -Builder ..+ Hero -Hero --> "-profession" Profession -Hero --> "-armor" Armor -Builder --> "-hairColor" HairColor -Builder --> "-weapon" Weapon -Builder --> "-hairType" HairType -Hero --> "-hairColor" HairColor -Builder --> "-profession" Profession -Hero --> "-hairType" HairType -Hero --> "-weapon" Weapon -Builder --> "-armor" Armor -@enduml \ No newline at end of file diff --git a/builder/etc/builder_1.png b/builder/etc/builder_1.png deleted file mode 100644 index ec892c15f6c48e8e6585c308c19334018167033d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106529 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

X-iNQ-lhx*DtDx9r# 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 diff --git a/pom.xml b/pom.xml index 79bb7e533..df01809f4 100644 --- a/pom.xml +++ b/pom.xml @@ -463,6 +463,7 @@ singleton factory-method abstract-factory + builder From 3eab4d75a69eb6d44a1e1a75b57aa9db9021a837 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Mon, 14 Aug 2017 00:16:29 +0530 Subject: [PATCH 17/27] Revert "#348 - Data Tranfer Object : Added module to project." This reverts commit db10b937f2b07e8357ebb0b4eb02ca0972d83b25. --- data-bus/pom.xml | 4 ---- data-transfer-object/pom.xml | 16 ---------------- 2 files changed, 20 deletions(-) delete mode 100644 data-transfer-object/pom.xml diff --git a/data-bus/pom.xml b/data-bus/pom.xml index 22b3f0229..a77b59106 100644 --- a/data-bus/pom.xml +++ b/data-bus/pom.xml @@ -27,10 +27,6 @@ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 - pom - - ../data-transfer-object - 1.16.14 diff --git a/data-transfer-object/pom.xml b/data-transfer-object/pom.xml deleted file mode 100644 index c5bfc7fa8..000000000 --- a/data-transfer-object/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - data-bus - com.iluwatar - 1.17.0-SNAPSHOT - ../data-bus/pom.xml - - 4.0.0 - - data-transfer-object - - - \ No newline at end of file From 9c088b5f478360e4a7038662b49eac62af341445 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Mon, 14 Aug 2017 00:23:03 +0530 Subject: [PATCH 18/27] #348 - Data Tranfer Object : Mofidy maven dependancies. --- data-transfer-object/pom.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 data-transfer-object/pom.xml diff --git a/data-transfer-object/pom.xml b/data-transfer-object/pom.xml new file mode 100644 index 000000000..51151349c --- /dev/null +++ b/data-transfer-object/pom.xml @@ -0,0 +1,16 @@ + + + + data-transfer-object + com.iluwatar + 1.17.0-SNAPSHOT + ../data-transfer-object/pom.xml + + 4.0.0 + + data-transfer-object + + + \ No newline at end of file From 8525bfd323614ffcd15061802c7c60c3a2cbd702 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Mon, 14 Aug 2017 00:40:01 +0530 Subject: [PATCH 19/27] #348 - Data Tranfer Object : Add dto module to main pom.xml --- data-transfer-object/pom.xml | 57 +++++++++++++++++++++++++++--------- pom.xml | 1 + 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/data-transfer-object/pom.xml b/data-transfer-object/pom.xml index 51151349c..2f4871cb6 100644 --- a/data-transfer-object/pom.xml +++ b/data-transfer-object/pom.xml @@ -1,16 +1,45 @@ - - - - data-transfer-object - com.iluwatar - 1.17.0-SNAPSHOT - ../data-transfer-object/pom.xml - + + + 4.0.0 - + + com.iluwatar + java-design-patterns + 1.17.0-SNAPSHOT + data-transfer-object - - - \ No newline at end of file + + + junit + junit + test + + + log4j + log4j + + + diff --git a/pom.xml b/pom.xml index 4f4b5dee6..cecb0f75c 100644 --- a/pom.xml +++ b/pom.xml @@ -143,6 +143,7 @@ extension-objects marker cqrs + data-transfer-object From b62d431d62e22b54131a479221c7321097af7b40 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Mon, 14 Aug 2017 00:40:29 +0530 Subject: [PATCH 20/27] #348 - Data Tranfer Object : Use logger instead of print statements. --- .../datatransfer/CustomerClientApp.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java index 3a9e8b88f..f5fcebe03 100644 --- a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java +++ b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerClientApp.java @@ -24,6 +24,9 @@ package com.iluwatar.datatransfer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.ArrayList; import java.util.List; @@ -38,6 +41,9 @@ import java.util.List; * And The CustomerDto ({@link CustomerDto} is data transfer object to share customer information. */ public class CustomerClientApp { + + private static final Logger LOGGER = LoggerFactory.getLogger(CustomerClientApp.class); + /** * Method as act client and request to server for details. * @@ -52,20 +58,20 @@ public class CustomerClientApp { CustomerResource customerResource = new CustomerResource(customers); - System.out.println("All customers:-"); + LOGGER.info("All customers:-"); List allCustomers = customerResource.getAllCustomers(); printCustomerDetails(allCustomers); - System.out.println("----------------------------------------------------------"); + LOGGER.info("----------------------------------------------------------"); - System.out.println("Deleting customer with id {1}"); + LOGGER.info("Deleting customer with id {1}"); customerResource.delete(customerOne.getId()); allCustomers = customerResource.getAllCustomers(); printCustomerDetails(allCustomers); - System.out.println("----------------------------------------------------------"); + LOGGER.info("----------------------------------------------------------"); - System.out.println("Adding customer three}"); + LOGGER.info("Adding customer three}"); CustomerDto customerThree = new CustomerDto("3", "Lynda", "Blair"); customerResource.save(customerThree); allCustomers = customerResource.getAllCustomers(); @@ -73,6 +79,6 @@ public class CustomerClientApp { } private static void printCustomerDetails(List allCustomers) { - allCustomers.forEach(customer -> System.out.println(customer.getFirstName())); + allCustomers.forEach(customer -> LOGGER.info(customer.getFirstName())); } } From 4a81453da403fd76744d05e72b36ca84155ffea0 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Mon, 14 Aug 2017 00:46:31 +0530 Subject: [PATCH 21/27] #348 - Data Tranfer Object : Make private varialbes final in immutalbe model. --- .../main/java/com/iluwatar/datatransfer/CustomerDto.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerDto.java b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerDto.java index ce9ffdb78..7dedf891c 100644 --- a/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerDto.java +++ b/data-transfer-object/src/main/java/com/iluwatar/datatransfer/CustomerDto.java @@ -31,9 +31,9 @@ package com.iluwatar.datatransfer; * Dto will not have any business logic in it. */ public class CustomerDto { - private String id; - private String firstName; - private String lastName; + private final String id; + private final String firstName; + private final String lastName; /** * @param id customer id From f9789d6926ffaadadd1169dea65abd2fd69d06f7 Mon Sep 17 00:00:00 2001 From: Gopinath Langote Date: Mon, 14 Aug 2017 16:14:23 +0530 Subject: [PATCH 22/27] #348 - Data Tranfer Object : Add class diagram. --- .../etc/data-transfer-object.ucls | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 data-transfer-object/etc/data-transfer-object.ucls diff --git a/data-transfer-object/etc/data-transfer-object.ucls b/data-transfer-object/etc/data-transfer-object.ucls new file mode 100644 index 000000000..15f777aad --- /dev/null +++ b/data-transfer-object/etc/data-transfer-object.ucls @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b639f3630e6b842e6f9dde50d21069abd5d61131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Wed, 16 Aug 2017 21:09:28 +0300 Subject: [PATCH 23/27] #590 Add explanation for Prototype --- pom.xml | 1 + prototype/README.md | 49 ++++++++- prototype/etc/prototype.png | Bin 37751 -> 0 bytes prototype/etc/prototype.ucls | 182 ------------------------------- prototype/etc/prototype.urm.puml | 82 -------------- prototype/etc/prototype_1.png | Bin 97668 -> 0 bytes 6 files changed, 47 insertions(+), 267 deletions(-) delete mode 100644 prototype/etc/prototype.png delete mode 100644 prototype/etc/prototype.ucls delete mode 100644 prototype/etc/prototype.urm.puml delete mode 100644 prototype/etc/prototype_1.png diff --git a/pom.xml b/pom.xml index df01809f4..4976c14d5 100644 --- a/pom.xml +++ b/pom.xml @@ -464,6 +464,7 @@ factory-method abstract-factory builder + prototype diff --git a/prototype/README.md b/prototype/README.md index fe9e17917..e6d5d8b8b 100644 --- a/prototype/README.md +++ b/prototype/README.md @@ -15,14 +15,57 @@ tags: Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. -![alt text](./etc/prototype_1.png "Prototype") +## Explanation +Real world example + +> Remember Dolly? The sheep that was cloned! Lets not get into the details but the key point here is that it is all about cloning. + +In plain words + +> Create object based on an existing object through cloning. + +Wikipedia says + +> The prototype pattern is a creational design pattern in software development. It is used when the type of objects to create is determined by a prototypical instance, which is cloned to produce new objects. + +In short, it allows you to create a copy of an existing object and modify it to your needs, instead of going through the trouble of creating an object from scratch and setting it up. + +**Programmatic Example** + +In Java, it can be easily done by implementing `Cloneable` and overriding `clone` from `Object` + +``` +class Sheep implements Cloneable { + privage String name; + public Sheep(String name) { this.name = name; } + public void setName(String name) { this.name = name; } + public String getName() { return name; } + @Override + public Sheep clone() throws CloneNotSupportedException { + return new Sheep(name); + } +} +``` + +Then it can be cloned like below + +``` +Sheep original = new Sheep("Jolly"); +System.out.println(original.getName()); // Jolly + +// Clone and modify what is required +Sheep cloned = original.clone(); +cloned.setName("Dolly"); +System.out.println(cloned.getName()); // Dolly +``` ## Applicability Use the Prototype pattern when a system should be independent of how its products are created, composed and represented; and -* when the classes to instantiate are specified at run-time, for example, by dynamic loading; or -* to avoid building a class hierarchy of factories that parallels the class hierarchy of products; or +* when the classes to instantiate are specified at run-time, for example, by dynamic loading +* to avoid building a class hierarchy of factories that parallels the class hierarchy of products * when instances of a class can have one of only a few different combinations of state. It may be more convenient to install a corresponding number of prototypes and clone them rather than instantiating the class manually, each time with the appropriate state +* when object creation is expensive compared to cloning ## Real world examples diff --git a/prototype/etc/prototype.png b/prototype/etc/prototype.png deleted file mode 100644 index 073b472e5cc3b7899160c3780a9a050fba0d6544..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37751 zcmcG$WmJ`G*EYNW1wlf(yHmPLLSoS%NOwsif^>I>i%toV?(R7yiunDI=?>I3zpsmQjlcp|ran1&(3! z^h*~Vce9}+h+bMX;Mx`+3~{`-lG*I`+qPI>?tVcvvrEX-9me>65yAOL%alBPTEiUL zXYh%!6X%a2DzOkM$>{65uX1-hc|TP?eE2Y#ul!~?(gSZ&MNKVL@T`Eh<={#a9|~9= z@F!e6aV+=Ozo3kt!jQlJwTCT#0s>*Ma9tE|WI#EPe}@4XiA8+Frs0jE1c5T1(UnSk zeqOpTRF8THg~Nb8aC8MN4p$5V0)+@mehq#FY1Ny>HG-E!)Pe&>@s3hK_hs;ID`)FP zi^8cz27zdxN%N^-)uDZjO`|ADSZoPFAcZF)O0tOMPhbazNx;Ge-+3RWnIzp_ic!?W z$@P>A+H4L z5?lRGWW!x~o^y@8DW5GN-Wl+L2!cF2j@ZAbbb#}qx5>KLEg>fe5j&1m^G;c~5H%*0T8j8;O zMjX;=*t7ex;uXZJv-Ja@9#nYIu~KAeL%ytDl+w=yO>K&*Tr&9GdZI32rEIEE)B;i& zFNbI>O=oZo_FoFmsKBd3M}{}FqyWN2gP8`DEWSRiK{hP0?pVU*TOIDb;wJDB(X%>1 z+hCnq|3kMbS0X8K!BeMW;>@b-QrJksik87YugVa{bU$;yJ%Uv2MVwZlRM!M9e)c7O zekKxmq%9uSog%Qtw4TVWwC-eJDV2{%6k0|Jk^%ivd9;!wo_o4gLFIerIljXUmwu;%)2}vCGd5o3O^$F{6@Z%(FN+_j;pPbc>V0=*(I{H(i$!s#KPADGb3Qt;<(S z73thHrxEDWwoP>y12HPYeQC(OF%y3@CrMAyWWUk9qiS=z`dl~b{r&eIAxqDri-ggZ z_b9{T%P9Qz6%B+~3#HcDszOXV%7*6OkcrjZs3uZi@bCS$uVO-n zMQtV1acPX`WPfAdg`A8)4JKnhTqfRS6nZb@e%%ncOukgYQto%4)Ef+S)3C^NGa(4? z$vnNs%&Oz$-j|NE#5n7b50=oKkj=F92nILM+TEt_Imqwdp0|>Jzhmk}Q(*jsZ9$bH zV@@fxCi^HQTFy&h7!SvRFPk@(E^g_~~H_@JV2 zac0wrI2L*bN2&Q=6&bwND~nuLiNa~@AJ!wrx~0hph$raCt#lJk^f&)5boq1jKZzEEuoCH!Kc#8f3O^N8276SG{+bbknF^Z@Vhwt%WA>Zrfbd zG_9-U? z;+KP5VzM4koI5p5!QbTa4H2#sIr|7b$HHj!+0mGeanYC%zoR|vM0^nasNQY^hrY&F zbXTIgg3)8|)+{{wmyeGjNO@iyxiSfHc&>dX7vi}!<=u0-KW`w`*1cXkG5LNeA1G9( ze;B=^I$!f}Wp{D;!@L&SR|fjdHYI|_wRsOd!eN!UBowR=csWdhWJ?NGnfJr{s71|G zCt}hQSc^{0$<4^Zsk3$0!=JZ2&W~=~cNq%n>OV?kK|a&jCiE1I7HuKz)byv>KjG|e zC(?Gg*l1a7xmq)g^nBxZvQ#zv&1Q^AQC?O3(Frtp4s@W zif&W^?j5Bp)QMrS!$Oa4kf;Dd9ZTsp&^l30k&Uj#S>8$bxoYB!%gL`7P3nN57Y$_j zmq}rWj;$^8-$CScoHvLcBv-V$>7@wBDTS(P0KF6##fX=*$#5{7ivz;hgOtE1&`!YqHf$XiWTrPxA! z&El_{q(} zx*y}*L*?kJRm5!@JyaC+s5@#igoV3_#E{!j6(8ts07qb7VDmoi7gx5#+t`=a$Vv5h z(eCp%QRCns%Q41%jiomRNX{3uZWop1+Z9yNlq=5A>d;@I{|Y!RlGm$X%@+4f@*y~l zmaA=)v1Jsb{q>(kgeT!gQ66|dX3)2=yq|rFka6`@8Z^hpX=4s)7d9&Da7{FVQD09(?qtp?}K^m^nLUc zoc|KLPe3+pB08!)v}g)PEtK#`5)SoRZF_9gdoKVc}Vw-<2$q2d2R%dD@Y`PAUf5yl!b0N)@XPhIJ#SpU)QGr#O4fcGFmQvct? zyJ#!PcT7_zvYTtx*{*XkjMsGLc~JijaX?I_H45(5M>h&yuWmOSF#cojBoxLwn1`W= z^{xvECWd+hgos#;8>j&b)$C|7uU*fp>->V6J_gnG)G?*TGB#W9uTSHk#+zJtzT0EL zs)tS2yM})b<0=5Rb$j38CNy3Ha{H0z%jBue`__@sne!(a=PQULVtKaKpCBGYN}KnB z;0^OGuR+HoJOj-^F>e`i3uCuHnNe^Zh@jz#CVT{C>#Wo$KQ#qE{EGDx!KxSvb&6=p zB^8C34kMxQCh7IOj;9yo)NS4tcBagpuM3@&MN>c7$v6J58 zwIUp!*LvA}b7~cPm4;8GxNF@NVKOnC&Y6HC_{Lj)qow@~$#9~7N4Ai%3(stx_3DL4 zG39y~`%x5SAEF2^7pXSGA7XM_-Wj0>t(ZhOZ%hu}_3FE}IKVKt$W*q{jD?TRB=Z1DGV+UpG@l68jHtea5H(etRkSmUZE9 z82PL-LCQYnhy0Z;s^sAeiM-MzF1z;%;<^%uzbv zwD5XA*)9m>i!mPfZG%7TAN84(Aqq*vvtu&D1_4)FM*nTFwz<)_54Ky8CF*PLbu68Z zFFhafNHxC9BO#JtLBHJoR_KrT^4wi|UIgPu3xwbB1N>jx6-8Dc$qxMwlZzG|yTl3- z9Ip~kwGf=FA_3>t*1Z_pmsh6#*JEv>V+oK0a&sgl|T{v;LUul-2FT-fZ zyC0oTeT_|c1a&ih{6+o$@3^d$+?Wq+=*);c?Yc-+N594-r8c;3@paDO%e zyzf7AHnH2N%BwvT=2zv%7m=f{_w8Qy6_S)c8N*PO{A1=+pC}j9PEa`djr^l1qjF1q z@czl&SUxe#YO>yxOTG`l6;8-S@?-y^T;S{w~Nh-hH{=<6{zUD5(Q9c*F zFI^GQGDf@I&xVsRDbU`s?65B48x)coqqa=aND8Sj@5iSet?xfjLlA1asm}`>N?+w; ztTVRVs(ekPvsP7er7|_h?nfA9FE|p3(D-CRMc+@2SNNZdYm{_bJ2}sD^YUitxQ^2* z%x4XOLUEwGH3(bm>nBP_vmdX`yT^3uk47d`Nz_?iC*|UeV;>{7PZJ7Q?(@I9OhX>W zjLfBLktMg;5?Gj6S$rxNn1DiCqBJ%f$gGZ5*e0GmYnv( zV`t-Kit`G))kw?2MSB*O1Y|^_TV&eyoljG}61~pKSGheLvSX0$MltS(#D}q}2xQpj z!*=^ng|JB_e$^4Ds}$-paW&@jU@Ay%6y?ISfPm#5!QpX2*NCr!=2PEo)B0Wu#+23v zwojDi0s+lzfhzy8aedP5)aCoZvz<_Y(5=qkUdKB|z;i6%DS*|uCn33Vr8WLAm)x|+ zpcTEESKSM?m4VK%^xsdCEE;(YJ$VhewrSV}jHS@b@oFo4#KNWu#?TR#-kcODq<0b) zeC%R($O)MS`)<&|Y$2XYxIr7uy}hizY#0PLysDtYyj;e=gJ}S#EW=iD*(|^q>qdj& ziEH6XdY4Ha*l?1{cDRT72m*<)~)Oz=6`>t$oD7syp_BTxd}txl238F&$jA_ zJ$<={=!YkGNg{)1#`{Y2%g-pn*5~lLz1)b;Y3h`p)`ucC9PyUXR03?7nK+11*7wpT ziUzgk=NnW$ij8(zn`f~&p7I$VefJ$+neD83_@H-cW>#F#zkOVF5}K=K9Gp*2#Fe)R z(G>ry{cmqawNRXrEiS{qFnlr{uC+YPV;i19yTFaRPbpn^7F6)@6Y{^7S|3>4vJu?H z_ifQ?R{J#mJ}1>%fjrw_UJY(nT&}J6WjB--LsvK&>Kck8n&;_SFB*%3FGKJeOj(Y( zq=nR%xv(NN(Qx#XwhVsA>W4Lx#MMt=-EGHg&dsyZit!J6t{8r|7t)>?=+|J+xC2Bv zO+T)wcAhuAKSF!)**Wp=w!=m>Rz2Krzu7t2|D?Gc9LvN1C%1g|T*^kk^#Rk=n)ht? zNckIq=l8_5N;~luS-u`WyjcH$BTX<9xAyv#BAKBknCiLKF$a>dl!!T9XE{_bcP0Un z7MMG^u}IIQD_I3%J2w+exj%Vj$>MY@y5dWilPwe_-%=Pn77u^>rja^mnY=FRwv8Y@ z+<#}r>&A_xmK-f=# z{20VH$Lx9)x`Mjg)=f;+zvBXvnN5_N$sk1|D_S97dn;B%=@FP%UPYmFlslpv@w7jAl+3 zzD+hFBP-Eua6g9Wnm6MV=de!z^R8RMkfbA>2R>N%!Qxymd1oNdD82#@L?D0%2G18qy4ifE(XUUC#3 zY!I8q4gOc3(0%nPPzo}lyHju#h-VB??tfK~sA4D!^PeD5Q9e%w-p%3qhtHGY ztG6>I2sD-93T@j=Xi4qY!`-h8=)**y%c3{V$#Uz)P61RIzVP%9Ywbjq+9T2$>^@sd zvQ|>r&L^Wf$HWe;oY1G*)^Qc@}9I$#juf!q#xoWHN2InV__acz@pZq$`RI&Whyt? zO$wMIBMLZRN(eWXh-C`Esk9rg{wfK>;Ql96|Ia`~$aC?%@htrLYW3pVwo=L`(<|?O zI2POchn(eC;Q5Xe>aR^HJ-7RsfuL1Kru*!h=C*T{1p`vO!Ew7%Z+g$e=fQ$`38anL zHw&e-x$HUNmWDlV%Z>C&&imQAI!KQ2_B_z*Z>6T6e-lJ1W%xt50Tep8JvS}Z)pfJK zLG2kHX{j7{N*FQhSC5_x-x~~ChTmPlLZp(^Qbgq*!vL}Nk=hhSIThL`Tln2;>ooLV z?!bCXTxQgj>MP5bOXHuGtTQ+0qUX&H-s=9qE8caGxVOdag%>(uf|EzP#cFseqM0&T z+qR6iZ0=6G%Vej6A@j*bCT?1It4@8>+{+j!AO2mW7W-cU4F*cALk3=5ldhXxqw>Yz zbNGEpCW6XjRySTTIBV*{52 zSkKbtLpC-WaXaDs(|0w`p;A8Tadq8f?N(+Hd@z#lydrO+-(hbp2TGfN7tqNVDBKrC zr7T4V? z?#T6A)6{@Lg2L55mh9)BU6a=I5W>cl>T-UWZyF(VIA}Llo3)&q+OBUP`L4&-4UVqZ zx$Pm}eE877S=0~bi~pCWeKTn0O;v|B>mPE2=+=(*uL5MpC6%2yT6Fae5ADSlc+NH5 zEW(@>ts$IO*n3R=S_r8(Gyr+`f=Ro3ii$TRiL+dZMQZT1Iz4`sRa%A zwOtNv3C!o$!5?qx_LZiP>{~WAOLsLF%xA4I12O|s9T#emx3BKZZ5jVd=NgdpcMD%u zPq9RBbLv|Sc-nK#bMhUim`Hmax02CR0?Dz}QhzKg;U?rrbINpCEUsRFo3wmNKS|M>`OsblA68e{^j| z7{mMgWiIDatewr=sHG&D4-1VMwdA&2R4=30<+BF=N-c z`>ED)l6o-6$LPVy#YMaMR#S6;kJQ7uZUZvixXD40$jQlhECN?LH zW>Rsr@cvuV3X)BR=ZRc&x@y6PwQw#agcG@-^t-#e>6ZI5O-;>{lao097)R$kNjXKJ z7-7aMR9C^V$R^}m`QXJ2uFbA5T?*pTkKYZ^pv2_#VSrM8EV6pt&Mq$I1bJFpTfcuF zd+&bO21naC%%|vqjErnzVuFlH7DI3B-JN?#9_@&(uCA%;{oeAu z?6>QCkCx?a2eY*V@uj|_ii!&5lIcZHE>2F#&8m5;A`F#EhB}LrQ-BUGYYI;1KH_*8 zX{{{?9X5?Wfdng^cZ#?Lr;$_2pXGNj5f&sMAW*QC_wk!NYOu7iQRYuo`$}fUjt7W` zyud0jCe_KFV({Cyn{G&9QBkxi>59bh%Mz6%vEG>fnG2C-R)jBF>lKUFj&NL*M?bbMTX^YSjlu_4varTrQDheE56PI##}0%~sLSjv*xZ`^kGoqb#KbDaEA zkFZ}l!X%>=exEQ59+vYQ@Y>ZBb@dD2%Ic8vatI6jcq|-~t+o=0;gR~@s{nyu4Ns~w zrB5K=ITXtMpOE|0j59evU(A8#rvvYuhpusq0V^9@2X!*p4Y@>wS*;hmc}&nO^bhK& zq<%Z9GG_JT|Cz(wvNV@1R`)d!J>@02a_qi^IP)xXBQ5uab5lFH2sj5j;R)1|cj@-@ zp&d~V7zZOu4QV3&06^mJ(AqORJiM@=HG`;#!TxP{_#MuUjkR@5((zvQrB26FnV=wo zh+)sCetj{T-B1Q zGK>DOo+jKs=bJxf&S1PkW+9~_Ufx3wKHW6vfGU!b-A@OkoG9lC#Asq@G8 zQu6HjNK}Be#+_Wr4Pvsa-~BIZMogn@RvXK5IWVm zs;a7DVPn6SQNr1`r+js))oO&%D|3Aj@39?Et`y$PFDhimVG)-yqCQ{^xDl zVk-TI;*yf_mYxX0@rwM;8ZD_80@%#B>WmZ=l9C~{Y{}ahG9+NMghjpbo=CI6ZHqtF zvcJ#Nb<})>11M;Y^V21S9zJUinu?FzNr0eH3}Ey0)D#|8Wt+*{00!?*OZ`V7pt@h6Zb=(Uh5HG> zX9i;tAJR}#0X{yyR5?=MVDheIKp0y{f9 z0s6p-Jz8E0Sm_(V*I0iRRSku8LAUy#b|MSUfJr}24^8vyx`Dc)pe!q0JOge{wv3~b zlWWt`;Gj&wWJvR3eJ|R>+#w4xGq!Bxt#ms$QWGMkEv>ixwoeCDnDQ}&>_tFOnx39M zkrVHad%1~&92lTqT1FfzLgu%Byt})5d~BZroX?i87Y~gKy}xz0xzbAJEDt9{??qD< z${v*=O>@2_+yANr4Ib#f2m$qbJ#K`ma(=I>s;W^rS}-S!M^YO=`W`i^Y+=d3C_GXD zw&>%qD9UNKD?=`U(YvVuUG9^1^SKO9Q8IJ<2K_cIBil@iePdKk|6N3;@0`il3y(OD zb_=NtZ{IP(T%)^Bg+v|dx)|ymLU)YgcUTWW=tF?{horAUK<|Fdf9=3a=wx>kqd1k| z8wYP5Ru)(`>me0&>eBQC-Pyk{hOgx=ac3GkeZix%j18z3VW6;y+RBHQ3NIj(q_!qy zxw*OmwMcX4?{ip#BMV6Vi`+WrjD11K64ae7AvSqVo6JXRsk3YxwB9+U#_r;vr;kMf z65|N<_0*6;8oNQ%G6Mlk#4??dlZrbk5*bM2s^D7Z6*_ggkoo)}#T}T>zeD7Pn+K}q zg(=vTmxoWZ%6k{I?7yn(KdspAoKgY@u)}bQv9$^?Jc9uJ5k0gK(j(;=%U(z_QhBG& z8bgcDIe)Ob%W#*oNBfPK3aoQ6a#q7%_HnDOfw3Xkz_1@_320`QKRN&qvf!e#T5;i;OLLXMQ4J%(gz(yQ} zGX~>PuI_E|N+UJ683y5(3^Zdto2{!(5>rF%^s1bm^*=15oc;F{w54TbEJ8x*PIM{? zs|mi00lg+SO?%bz0KO@;i1{&)Hmoi9TKeeCMG=#y1`o6#29=z|;5P7)cd4avF9Fm! z7(9m(68)Xd`>N!1Gx)|qaz;iA;g@aQhJe%`D-mAii4HEaBFfDP9jSZMH8=)X%KQ=o zF$i;)AHaIz6~|3vUaXG@!HoH7jN-F>A6hleD&UMWmM!`8=)Eys;hGzSs_cJUw{Lc7 z$(l3SJUo!;31tw^!mLLRQ-I{VSa#}VKUT^p%2yTmGJ_vTM^%(y>D%a`*PlKb0-Dk* zz~5^b^g~I92M0UT_qeo;fzwd>Cd_M0sN-LU4N^0Ui&pG-H#axV)M6asVUHunG6qQY zjAKjr%cY||;$Bfu$+HajN5v=Lj8P1kDD&cFo?_5%>irs4hG+hutqp4NX!{fVV--WS zQ0>VG!sAJ$O!xi0$LG;6xm38A5|Gka4`nUHXgQG!_kRDSNP@afp?OBohEIyybq|tC ztU(+TaG490;K541kZ{46|Iyo`%Xy`n7s_%mtCAoQJZEb=LUU@D8eJpD)IB%jJ z6bD-b#s+~#5X@qtyUYEC&IhnW2dxL?_xp{ktgHZpUXbG^K&Fj7k@F|}5iqrL_H&RK zS@=m3I~o zgz()h7U*uYzyY9y0#fdGA*)%D40fhBNScT&d=vEO*JWoe?uLeE?0U5!3ZNb=Q5nv88;vMA6637RpV z<^11C#zx@`xX+-0t^j3$K!#>D^BDJ=sR-J=ijdlhyKY@X7G)YQs-~oT*35J%A0uaH zo(Axb*9DVbP4cL&C(W3lFn=8xWqDB@MTb6WKbISr%jm1jOi7wa-KX|fJkEeujiICk z3)5e~3bQ<3*L%^=656PoiA`r5%r}1!7fNb^5F9vRT9GqTX{A_2^1I!9Xg6*wO1!y<91&mKX&}PEIZ`v6SX&T15u~p+Q9}!JF>a z;S$>Qok!kyA0H-fOg;nY({_^^#)U@HxLuu+_^BA`Nho&?r@)1eQK^)D^-9}o;QE?Z=T(N!|YEf^>CtH7Y}Sk&%EwpwVzhE7hBHh#jp2R;|N2_-&z)l!bdm zPt!^8y()o&B#=t#;^JamU0sOZz&N@tM1i{tOVqMTqbq5T3zH^;q6ps-JF76`h1LLK zSrQSfR%n+_#+eU1)Uw<`Db)1G6(U|8&bRLq7AJ~ueFa{UjxHNav)3=$*FcziHAlX} zegzr9gEGdVs4{0z*_Jw~BN#GiLWa&YgSuW+_*ODGPoJN2-o*P!=Z&)7dhjfGD-qMm(j3g+-jW znI=rmqj@W6XGo#FAO+LRnS_!mt!w)L_|o=<3Sds}-@m`}5IVpRZ|%9%pJ$4&e}Umg zuIOhIHu^{e!(SU_mGs7Hy*m{4rUL;E_JyW7$?^qyK0{`246xjV$K|rFkAYvhkC)uH zH@vGsq`r6D1qq;9Ule#HJexgl*5k?z3MUv0H$;p+aK%;<<@5V~_<%-mj26_?^t56kv^3)5nl!||Eg*D@*qMGF%`j`= zt+?a8ykT`lt;bI1V-TF*ISZp-TCnt}9WXd+YV-WE$lbG~N&BM|G^wbou7)_#fh36^C-Mhik!G0MUxh#uF&c;x zA3t5NewTVtP$kS6;zM9*y{~3ncn5dF?ZF)I{`+P;macNcsk$pc1iJZ&#I=OQ4@R&X zZMql*^K?IrHl>NFY2M_!E64r){jnRQwFcqLeA{inG;l^J&|e{RrtZbt=zdLNK;8Ok zK&JmqiK24vo`dJ()yl&>*F{_21oY5hDZ?BOG#Tr~C+q@cblCHV@my1IJCAZTpXqkszRmOy9JT9t@s`KG+;=tyl+ z=WO(w4Y!2<0Gh?x(%FZCc1=g4G7WHy$k*N8X!0+M@`$uijt#Q-KvraE;ZR&uR3-qz zh?9Egwpczav%mf(NzNC z3SR=StLdm{=7EBsP#72S`3 zhN(ye)TgX*!hi6vWN+|dDJe?u$Xpc)z5!)JOJjqCd1e^ocUgl|s^`NyjnX7Un`}Y}?`b?!Gt1(T!8-W4IJ8 zl|P1MlTQ3_LQO@5C~>|#8faX3^wF49t7~ecVzbBAT1FI*3kwTNyIzcI>lY=J`yEG# zG!@=-M?t8Jm8P!p7c|_O<59at0DwH5*-R`q5aF$xd^ZY1RA~J@@Cc+p^7U;!2-J_@ z&y8`Uq7|#q+GBE~t)(?c#-5+VK$x}HghJxjjA=KV3ntq^r5O5Xb5<0Y*dla>eINy? z*+qfW7=Kpw0YWBhnf-*|TFTDIT_&+`MTKe${6rRhsYj zVQN}`!MSe^L~GXkBP(?2G?(iNR>aFeUv!ry-E(i+gYlpe#EhFmrwtlOtgF*4daPeV z5r5$>M!8Iqo*_Z+U@o_C@j)?zUVDSh00KN4}_W; zZ=+{tr}17JzCUr;cYf>e-rdWFPM>YkL_0e2!i!3^^8!@(7V zn4QC`)Hp~?ysFbV=w4h5UwB_a(Cr4iNa`+>b+rY&bpZ7i6{(y8s+SdL(8!WR zPtN)>gO5|Sui%eDK)^qJu&iCu(meX{tVs>W&%T#V%dWXtG!93%jeZK+K#iv)N(059C(LJVjW||^mp!}6;`%d@P2b81s9qn zn8%Bg3>Ll&QlN4~koXs-5a`K6+SKvPhNKmLc1Ah|^|8HjL}pmm;d}k*zPJ^d(#ZLt zp;3E>QtI`sg8Pzmi<*+9IlNZ5iObdkowKi@O!Yw%y{oGREz88nfu9wA=iyh*?_2X1TM1rG)Z7>5a}OUSm@k(E?^7$^ zI61mswg~Qh6S(w(2xcTQc%!VZz~r-5p_pys@2eGtw|)O|vOoXb^^T|BY;t@3r%B=wpf3}R)(~~ z*`Gqm8UebM03>h|fAG!^=DaesY{r9dRln;&%%gP)cmceQokvBYt-YM>S<)jBG71`9_?=U5Lp`0z7MI&QZ1BCUnbylwp2F2c-L?3UO}KTf^OeQbtS%EU~P4)ut7v@ zrg#y#@(ruvB;c09dcMB0O`E9DOdZVYNX6v3ys~m(?NQORGsLw#?iop#?&7?57lJf3 zYawF`OWZpN2N1-!9aCtRttx_1WPR?!rprO9B$?BzOw^N%-l6??q9XrNhcdP}i%wzY z1{5*w%zVfGXj>E}e`e2RFg2$@pd&(#ey=B};IL6{Bc`v(-%EesXuTfgMSx6zKx6Pnw|Jq|*NY)Q^)y9mr z0;Sb{SNiJJhM%x5pqq%5LH^8=h-LcX!UJjf_IUcSH1Phg&$rf!=4K#W+c|S-Sr+2v z_Ciq^fm;O;d!ZOnf$h)2kIKbt@gKgw*sfW}J_~2m=QG~wl+k+n(D}V_6;N9`RW{StD<5%)4e5vb2L?U_xI0Tntl-q%sL8Uw~R_bW}t2E(u<5( zVHe*J@3mXgo5f+*@*@gE_u!p!%AFTq=KdHl54JdS&lnvYa8kLowFMX?5EU;jE>>Wk zmj4XMX72e8Q(E{h954Su@>GP^Zz4z^2LRbaZ!$a)B^)=K92(DroJd~ ztuJEQ|9cV7u`pBR0{tWoA$1jZW4dzzC~@8Y^;o8{BKu<})u;LeNH zgzZ?Oi1^1kB*Y23Iu&mwYx#B-T%4ddOutb$Eo+4F7~wWcg=x>}==0(e_xigPP*b^J z+J;U!Gm#eC#`i5M8g86>zjWWXkqlpOywtWhuJW%U)0?)g4urPAC_B|{VF!&YaS$SPT67Og{SV?@ zKq0V6r)4wA0w8ZJ*rF2)a8%9H9_p*zNX;KosWn)6+SJw|kVg0uC=MrnNu6?vwgRt$ z%&6i4o!x};PC?jIpXCDY|r!F^I4%A;z6_I^AQilM2t6(k(*bZ7r%qpI$DI= z;b>Pf@y%UT(YFeA{)?Jq&*NKB`KH_OXf-xoJou{Y^3s^6WRKT#`<_os(bLmK5bzxL zt2H0X+PI7Zr{*l7nO*1Sj&|;PtFDZjLfF2%E0Qtzoj#Gjz{^ZNc0 z8Pq6h2VEAJ#dvSHeM{3ndFlwga7618?*fjv#!2bv>1817jGLRAZ$r!)Yz3K*noQaP z-8J`amiAm&`lIHN>*}Uzdf`%*1Q)%lR-FA6#QXhGyMH8mtROb=?gu!i_ng z+>mPHBt*8X!B&4`NF=Uv;@NGx*cWtPbP^R^B1I@F6dVycYj3KtxmUd4Gt#|{edsQ} zR9l`kbnTV9jW>m(e;ION7RIpRdVZb0IyY*4L33e^jl5ZZB`!D`!@3H+<)>)eqeJ5F z9a>L|F`S+e_|Ds{u$E*1q#(w$(hIa8vRwqK74zGuM&ECs=(-Iw9b8q(-%GI0ee5~9 z&~`ljIv}ro6S1ZShmZ}j{_%p}t7*#L-v370wguZE#8kmJ78}!5?$r#T+#yn5TjI5F zyQ`IPGhb9kESYOc>$8Tsa~26CC+g)^vJ*d%IL4GcYy z7j4!}atjAH#m zJpt2rS|}mj%XBq<+r^E66QjtMkLP`Rc^bY#9}lEMBaWKM6j7JvmzQ0Lrl!7$S2}u= z!t<3EADwMP`jCjk*@ua8a=Dh9kmS7#_q2W9xh z*JE%?H{z_0T@|`l2fMm+4{aC4i*9>rscSubF#_f{)D61lP6G0!2e~uVCd)gv>SQ?6 zF67s+Cp0@6O4uRwUxfVALQQr)^8Dr$fTb_H-=+=74=r^6RoYY{MR-zZ&gOVvBJ7enMmS4L$P?vQm=hh zL>aqeabwM^NY$Vl!C=R$&I1Rwu~v9*zcvArDq71&beZ*_$Mj^h4Q`Ag{z4e~;!x-5 zRQPAt`mNK=KYeSyU; z3?mw7OTl0r#jXex=WdvnPxhN77R;7d8k0~H9Z-L_`=udek{fLQhgkz{vj5%Thko*} z4!<#$X6*Wsh=u10S;-Q9Ebt;SeQ->>>j>9pxymZfl>B08^aD`>UGHsZkG-W1s>s2R z%eD;}NNMrRSby&bFL=Dx?x+6ZxbNA<=kINaDCUe7l1W*vA4{Mctc>#M7X*vx1b*P7 zaTPt*-=Cx}vp$&aSrE4z3AqPrA1z!zWLV9KI_`Yfi7cs)wWExsjDCX> z+aD7pr#0J)R>RG9$FqZ5ObSNxdZf+H{^UI^&ex3TjmP~$_o?TG#P{o5@=FhcqNnlI zo?FqHFK<3uY>&6@=xB(+TditIygwOYiX(2O`Y`Mx;AWpFO{uI-b_3xhPFUB`eesn# zRb&x8YHV1oeF&)=HwKv~t9qqLl9f{P_}Hl{=al128SrSbHDo9((!tt)^Qt+#(P#J?qV&e z@C!{GL*ly5iBlVW^&-4gBQ)RoCM<92&4pitD3XUFYjqXG-2d80Fp3VrjRfi9yN_fI zYw`gEmvc$Lq12wSvWD7ZReFAk=-!4)>+I9gf%{IIyx_O_J>u)@qUk#xcf8tBMK(Jr zA|w6YsKbACI5yA4+F_r)v8~M;YV2c@Af{(}OwXe~C}LQ>Y_2?;Hx(Rn%Q#C;zbCo7 z8~H9*CKPF`zqZ(Aa;oRg+cLhtOPb7}gm?e7geDc(L=r==Yl-apkgZ<-B~cq|+c&Wz z#%o>pjJnAF$uf>O6O47&!e7^Kh=O*AVsIz@sON;#UVU%Fw*Dc!G?WWD(k?DXi8`-6 z`dPB@VTbFW{w&3CIa?r$s_umZB+SjO#q+YE4ws6%=drg!65l& z43h)bf52g(0~MzNJ~X5+pmBbk4yU9*m>GQpXoai>VukU_h z1qc3}+CQ>Ys+V*NOt5KV-y7ab)jI-RPgc*QDymDDlCN>xGJJAtPniEU3~2FassP(3 zu*6<%|G_N(Uwuk8pVg}c8qkj6X{zHM7tky($W9Fy3m^w_0gxL=5H#Km+;#cof*~Pf ze&l%An16qh5zpWqHw4^U|La@tEVD^j{y<;AsTDK6OV(Kfxd%)JFn-Va;t)yzv7EwcVD#@aHb@*58<%_3tBP(Jwxx$Dtf62SAF_5x)8>2H2}2R@#oq>re#FiTp7C6NO!o7CnYuFc&#>pMH7zwhra-_=?X>bnN%m zs#>;$mT2R6PVuLYy9e?u8AdRP@kw-fEZ*Px5upj8sN&X%9{hBtI$GX?$>!P&L-kxD zC7$)utZJ|^Wa`%3H+V%E^HSxWexbL6r@}Vj)KvN<_05Frtxj*1UrIEUPO|NjUxT;8 zQE^JnE@ba!|EBwgf#m0|%6J*I{uXm9L3c^j_j7#ytgb&)uqKV5Bu?|%{E*ZMKk-wR zf26!tc8w&Ad+fh-x_XCRMML);=9g~t=+vQU>2DEolpK|QTdJ8NxIbjCEoKFa&Jl{d zIiHd`_&)9d)B8yzqXq@0<(T}CbfNWh{zZ%q{cF1{FgG-?^H#X;FtK>qg%kO4lCx63 z^Et)mJIecwyrOuku~>`?EUFa^C;infIB>~pFi(Xq!9th$3YFYVPyMWWM6T8!5)CRb zj`E$hOD*~;6yvj?|K2sitOhhKU)}FQ9bnv=T;z}vYxkHI?r2QLXv+RHf$YeTt(@XY zv90>a{g8ho5;n#TPcp$aV4FQXT<>~^Y$E3K|%6Q4Sytw5QAS5BT**yiW`#X$Ljstsz?YD z#|q1b)cjN!0S|8j1OYtPnym_=<;(xQ=*Q~fGYLK5w`Sag+33CEQh}SmfB6DU2s?`( zIgqa+3W5ga{{MU`5uv37gD1=dEvR7k9R{fF0Bw>g9YEt|tnXtq1STjW2t~N`q5@E2 z;|EMsE+(nOwx$+vbgLkSv=T(5Dk`br?2FR+m;?W_|Hq1|C^z)qAOF_p|KZd7&Lppu zVZa5L*9jq2Ko=(!-0zYq4;J8!vX6Tkg(H!rhYo0@er&N9pLh`gv~v1of8zRk=Z{6? zUq!F~T_CX-;{QuSr;`QHuDSB;Z|`eGu>75>UWzN8%oFQ*_x3Lfy~eL=(FB|LKa=>| z=0U1vzfD~RFTz%L=;2I*ieBs=J1!OZouV6jwKcNoJCr}Rb104POLq9HyHjnqc=KN4 zrMe-IrBPawci|(CU z_0Lm~fnOQ%kq&n6F~oZbMmV5&dIq%vS?FF$jLr!BhIr?QA0u9Sl0c|9`B#WmH{Dmo^H)354JT z4}oC82_7^AcXxL-?(PH#0X7ocg1fuBySux)^DT1DdHe0#{f*n>_Wj2gti4v%teRTS zGpqIKb2|au8`@A4yr1H0P@fzwNO}++bWBxbUy)N*pdj5m7_I4qA0&$wK(kiwaHkG+ zH6hxCw^EITNB^_GNrKb=E9iOQn!hjXy_Vci-p`J?5BZT{p{^O#@f30`f45T4T363}Lej9}`WuP0dW4()Olch{ZG*1(wmC1u{X9>$1YuM@Gz!35QdVf#|=WN6iakS^CCDISH ztF;k&{Gd%JMV$eQI<=T{JV_*~`pcMSCvaC&f8vn!J@lE74P5N@wWNX*Ib|NoOdMUG zOxSD+`H`?zsCnKUH0_s339!5W zon$J@T>KXbXq3R3*@Wrb8^55jISEH{>;TbWe4OI7Xk;=*@4Pe@AS9v>K1n_AQ-tPls$B)f})NGd)eR4<$AKn0{Zpr(GCtStKG#hZ)vdNl;TK`u;&;bMhgr zj=3z|^q?Bp-YVH?8QhBMFGn3D1r#K%*DF`~gpGxsPZL4eVWY5*`#c}t(pnX36s;x{ z!*6G?uJ++Hm2$rAmj7*38?Y+;iOA|GO9%cpPcM4iB8<*V&chU3r_sy|nkInL50d0= zF=(>4?R>h{ar9IVjCq@>I`L-|WD@P&{wTilZIGv?)En7@Qm_DR3H(o<`rYa;3g@g6 zK;iV#@8NuQv9C9*wKQT%*2eKwpsP9=?C2!e4U@l7YG}K5stpOwb<^Hh;ycY!zK*Il zD^nxF@^tdRB#}sh`q7HUimtSpl##=|LWF?TVD=uRiS@xTjk?1MT+KIXX_4km{O!`u z(p+SMA_9Rbud8=rLEmc1gd+Fv!#V&;%3MlSpqgsLCQD519VtHp*F_PEwy=1wzmS_ijpSFaQ1#W$S25z3W`+0lZLFbvmcWq?^~JUXY52`bENPqMlh` zu_80yQ~zVrqZ%lve!j=|1|s4U?*rgvTr#+fj6GoJKc$@Ako0t%HdLUX47fvse_3LL zko3O^md_S6ahT-z-hV=x6G&y5f1DqK2vG0^8ez$?@p~2)Z#}!vL}HTu$8+BQdQOI| zEl*fRMzstGVN!#DVZfY1D*x->5fW@=0J9NqxO>Yeqj_<11j=a)KdojCx!yP^IJoVe zS6dR#_K|T3*$-xJOsbqdiNcK-o2Uf4@LU3j@}muJ{R4Oa0#6J4#A?z&*C)pi67nssV_Vkr(I zmRd$%<}$h0D`yT`Ezh;pE5Ak1jcxk{*VYWSJ>$$&s$O1Kyhgd21jwcSyYGHtbi*Z% z{Zde~Sza^9+n7?LEWIKkKw@U>zX;^?wzwhcko`$rVMaoP3Q*=?5vD>cZv3u>8=YDmJI5+SOYlEXkk&mxbgKORqKkJEwwXDH2b@AtZ zrrf%lziWsk={uO$@5qNz*lr(0<^#xgUnoagX1O&hSPxs0TFS=_KDUr~3lR(R<3;+H zokV9=9n+#m(a2}Enltn0cb8}Wfu0TK9mMyhejfx+A?c7ci{E!6*CbFhUcRRc5-)Ea zRyLj7JMr$|)=n90T>L4jGYwvFVNi%b=y{mEzHPC5=(2p6vV2r*US3{Wnrekx6Om(h zx-xZGNZ4FtJIWkX*iLAzxZjIm{&`yLGVQF+*KcWMD(CWt?DTq4)`$5F{9a_6ZFqn+ z7m`SBS7{Rf3Gh|{h*9a%>!<5xo&pM&|CYV#`l>N0i33lQe&(4YWlo5r^f$`6!J(N~ zOtlc4FFze`L}KJ|f2&eYEl)Q(IaPQ4wwgS~BHV(P*ZvZSi2We=uGMq@_6_E!$<|K{ z6yZ^+6(|w+mLT{}L=)D7$OV^Yi66pV>8xJ+P{7gHFLfJ{`b7Y`#A&ku9G3O>_qVUo z(-D0qlMtw~oG^#b1^`$~94y7X^%Uf~3We{;6M1AlJs0v!%QoSbqz`B;mm6OOG)E_2=r)2e` zO&?%vMc?AY!UNC@N-F@w2QyO&u(>0qjG1$U=VxY8Ne)w*1=k zE_XnW=h>26?mt*|mUF(h7IN5xIA~!?(&JhQpzlUBRaaH8(4Nd)YWC?UZQs`jReEK! zG>&~;6{f{lfTOKBN584N!wF!6;BeZ%jS`PCEJClXNPu?Z%|&t2iJOIAAL#C!lH`2_#JtW>_`-z?!+O zPwZ>erryP3!@GmU26otfO0~Xhb6+*o(~X2xA&9KF(SE0|aJYcghw zyygyHfNPK*sOx`vx;x8Wst?kTNrGJ_MGU?6R?HWqJ1nSqubEj~2HQ2t45mu~W0dqSGWvC-lL{`8ZsRKAw=S2hPkji+%&;XxZ_Z z(y5P7S@iS(hseP9``maF{pnHyBG|Y~nwyu6nMvwQB8){cbHCaWjf{5{tEFfDm09uf zBel;gEFj%SO~6O%0I;JY!oraBw8jnD%^}HY;vqi9S*T46I@PCciy{|DWQd*9O3JU9=mQXnjnQ%w9gecSr|{m4BU! z(-SGHsHmu`Z(KigYCUwCX`aV_`_15Rg5U?U38mQk(_k2coUuOd&_8B&qL;~qO zB~Tg&Ie~1_>^*Gi>;jqvjTh^`BFg#x_w>a-EL6)28ZL=dCgD{lxc2Ac$J{55ZY1NiY9UgWY2Tt(kcarl6~M_L2=o;d*kD>>~t zlA_H3IgJ{Z?0VU*3IUi>yycs&hN3sj8{Irl*52xCXZ>`~`^``L0K}a+eb$`&dck(D zxPR+Ynxm`LRUtq=c3HhQWR8RH0SEt$h7xZ9j3xqDvv_-)5Fnqu`c!D(h0dG4gKX*4 zo)3V=8qgr@eEIYHY3mOFW7^00-a0LCAKPOU+s#(ci%NiQGUahLMZ&tq*=@&w8vvJO zeaZQhGrcd5MY=N%qaus?S8VI0EIm8EYu9Gl1HkHYAwrau7|Z~EL;T>!+~0T>HSdd= zAqt7Z$bO|d9RU#WK~5U$G@&1856RaJMtzcusm%E0HQULqJBwn)vkj5!feX@xgKc6j?@)4z%Q_y-ym8MLZ3F1=|0`r&09U45V8t>jul#?tOt7}I3Naw z5}?wCmfvng0Zi~wU1IT4KlRREPQ}wIJDGa@;0n1{D(NrC*8ySSc`8=y;I16=*Jiy4 z``ZwrQhp!PgpCaizqy06ypca5+(!{AAf8FtZ#oop4w|N>Ny%^+~lEm|DlD8-19M@ zsguz^Pxd&Pq`W~$2omEHB^Emas?1b~f;Hd%0aH5mwwwZzLYQFp1pETLHRsnH#H(`#(CNFMB}eyKTWwY3hp{IB*DEXj zm$8*c4PFrm5C24|&SOs%kSV*j7D7k6UPrwg9Ees$9mhagvwIu{03~GE!Ru=f6}Lq z9&sH}V^x&$Ia=#BS~7cmFMQ|dCiQ~e`YfdRCZwr050S&DLP|o0-ldo9m%8Jky&$lX zsx^=Di{HxUE$SuCRnXhD3(1m(>_fW}s;gjYg@!o*y18!AYZY)77*$_{1Xv>elC;B4 zRSjDB=)Mc;8$x3Ymv0vvkeI6=OV{~HC9T2gMCb$pMDKd~96T@X$BXfeLt~TzMsp{G zW#ey8Z`GS}-`41f0n|T66?OA8DJ9Ckf(dDanZEi%2etECpl5N>{NYcQv=qgT9rTRv zczx%Kb%=FQ$m}c$Ro{;*1wAxJ@~p!V&7FdZr?K$zWY`+_@Xngb%9M+nJwS&`3+=|r zb$^wsDR@3LArzS?eD$%V9xVo}8{czG@VXqac%n3pl5{sbY$}Eec#4Xz@|Ex}5=nlX z#2_=z=Us>UJ;QSVmaWzQB{m@QFT|QRqW~Y5znMW`7oq50`xIDG^Pa&z!a8>Z5zHWEU(?8uNRLd(|~;+~-)$+!T* z(k=IkewaysWET}aI4I#EvS&wx)+F$}LR z&|bkgRXei)v@FjZG1bS3$;(MKQ(WvLiqw&&uThJ0VJjRHW!Q%W(FNe{`ydjieyx@J z3~^#0M~lmUIy^esN_v}$9gRE!aQf#C9hPz-=47Vcgqr)@%U->LXnC0@3r5_f%a`Ce zu_?D z)0Y_MHWVL1R&=>LOcY4sW=$(cvR_A`01tBIOvEK6Wi~sLliC8@u-pTHipk4KuXfSX z=T}?H{?(9J7}L}?#|}_s>8(_KpxY%$DZn+^l&D`U;$M#Ldt(f%$0q>!yFehZHA+4s zxUHH(Klzc>K#HaY!4-7|$>N2CGY4C->=LfK(!^wEffYvrZ zZst#rNi=r^b)NEyawMM*5IN?zcyE#1xt$NyHDB-FQ_upBY5|ej-lYpnzGvR}BZRnU zCY6_-Y=k#7F(hWAVN1mbmytBYJ(j|guZ}i-}F~lht%aT#SWD3bjusZ<1um=(m7a;Hg`{V%F zz6yj92h=wPJp*{Ag`!_Qnn-vGc)j`XfZ_Uf|pQB5;>CQ;? zeDfVbg6y65513Kjnyx@b#PT_>AHc$ir2ax}1k+dEW)QQy8U>`mNq&z6-`*izxTalHWMVT3 zOB#(>tOZ)ScFCf8w3zuF0FwpSf-idaTHb6*y9(hga-9vCmqeTM!3@KMyw5J6vDRs5 z?hXzy0N*~GAIRgS=q!-hAa%^m&4K15+eyJ^P=|0NEg>B5fZj7PBkh7{WXBa=x`05s z0KTCf4xj;D{TvL1im%V9eBj^G=0gHpQf6aWF{Ia+Tie^C3TULjj|EDKH3O| zAc--^xv>eLA?%I;Z?+wVRK^!z_}9a}qoF{PuOvyK$Ef5J$U)??uV!-3cS}o4S-%8} zr+rZ{dZY*1vsnN7zV-mz-DA@o%*YBaG*i_%b z;^*hWt>>LKYF)fw=Toe95E!SyI1#0#c&rrB8F#@j5#X%h0}0)?-)ZKVSzOC3CxIev zdh%5Nx*2F_k!r3`_UdkFVWD7p|6yb877pv-1B)EP^xUJFl5*BtCKjYNTEaMAp+G0GuMQ zK=Z@9UNok1(@&0T2ivwI7@q3BQQ@^iU#WEF5ZcVid69%JtsAfDUW_()*5SH8mFt%mt=J)IU~#w6uy9aFBHq_yjq zf3ma7+5Dk{a)L?x%d`}VrFY5oL@qH=s%7?AqEAR}6qY;`(4>6lGxk_Ux#{uWsH7AD z$!(|`#8c|VXK>yp1Tz-g`9xBlmZ9Ik^+j1H#_c%f!eMa_iXu{I#;ADyhe(_P1CJsW zQmP}iO$`m=!(3l(<9O;$f{_~dLsL3P^S#h4A{*zUmP1yQaBmde0c#XlHUHxh5-Vq5 zXb9+*XSxc^?$gWc?2KtpjWD&l=i4GOGR`ko7@E{DvvtHg(6Sy1x@eEDgn^5WFtaK< z2$Wf>(D<{b(472Dd4i+@AjuX!>Q(3ZVYe2aUFCzFa2Gx*R0r)s0U`|Ww>&W8=7#X3 z&@}7)%F~i!Hg%QEq}k0qvqb0+_9oyUz@KovJ~%e}g~Nnv+kBf;d(|xN#fhvnK%213 z^=BF+ay)TSNDt5!zk5J=8-geK3lDkf$*|SE@2hl}{0TW7K1FkD9GbZNI=l6qZ-c#p{1uw-gSmZy6;%Lq_w#&ZT%1JV7Fl;IX8$_md3^&tZ);+~JLv9nI|ap?MQS=RM2jzH2|niE1YntEjpOI|3Lj`IC%Ddhu!6PIj+NDYkUR@fzT> zx>ig|?A%vYR2}V19S;l8e2oOO_7p;hQ)BoG@uSD5MVZG zh*Zvi>r7bPPKWY|ESk^d&XtmyBC1TJj-1od1i9+Wjqev07NP{^&)w}-5ptCUgPonk zvJ_G2Y>zE#`>2j-snuL!koc-C&cCcg$dL^nOst}*DarMGtc<}`SNf%u#f)!!*V5Q| zL9ZZ%f>(t%?$WirO-;bGhx-Jp?9!bfE1{Ezd;h#81Y8>lGHGy|sWXheVlX7TsyJxJ zv$W^3Jmi}G1?@OChjH^#^z|2M)Eu7v^%ak(geJ2ki}WXhES=a+SHok|HKFI;l4Zli zhNCCF+v@QX_=&sfa_67Rrm8_c+YUVhxF3N#AC~og6wzwAGfmF7r@|F1TCgSzCM6|_ z6Pdt-S(r=J5OdkI5lEb5M0bB7dHDKH<-T`g34GGH+VI7V+?oW+c2s@Uo@jV57=tlp zDFm%{+#f@Wdtf>503c2=ldU3ehbF^`I+}v|+_asYXIak_@rY`|O||9Fx^XCD$N*Tj zAj#Rf(XsQ>{qU{&Hs`YI75a9Ju(XYY#^|wVuPt@cQKKm3c);t~1)Te${0K60l7{b+ zk(A)w-<)aWHOB@=$z>#NWwH(CN2pumRJ{{YXwG77*Rc6zWtq8~8jD9h590_61;X$3 zY8xqXIWuq1yu+er#^wE49TL>4T_>g!b?vZ!tbI+Pa&Jk>j#Ah%U5DC*Wg)Zv5uvMc z)+&T;>2Yv9UBx|IbhfZ;@zi^c^5yc3)%gAx+JUTtk8ooPaILYxKq*-XjRU>vMA7YYN&6{Pk+dc{+WO zrlY8_{_HbuMO`U5%q2DrNVw!wgE!*@pAbfklw~%PY=68qP)*2Mf&-Y3fJ=F9ZajCd zTxUDJfm#0r`3&U|F;Z=hcx$bN@ky@ws5DrFp3mB4Uf6mwrtVG5NrV8M$U(j)`fQ~h z-)XcwQ6O_bT@P{E1dl%2Ex&;JW^{;F^jM2TS|&7qLepvgID5U3qmhH*&`|PXQc~Rc zyC(IkgCXG0ZKm?`gMlIFE?zC@%lg=A=r=)8wBkOczi=JO9M zx$zIrzf0AKs`W_|19IG0VoUu*&J`r0R}ARd%HhVrWN`}Ag8AZ>?kAaTE!{+(pH$`2 z=tpc9!SFb?!xp_pLp&F1%N{G6*VsiHQXWs`u1%M&&9{Tgm}qz@v#uxS_ua>hC;r0+ zk9?@hr3;F+S)sF&KIXAoD9B`5Qye`;Cw%JHi;gKL$AR}1i&(I_+5~8cjGiVJc@-4J z_%VL^LgTFhTOCY<9&9RsF_-(H=^C+?`cvv(rN3Y?L2!7S`NvS?6%XLm(2&qAo3F%U#viA-hbJd?XvU+P-j5 zmeAE5C}@~oeH0|YAMy(^8uiy^A3ZM<0T*~%pFnl0nAOJcz%qd(DqVaR0SH-}3S3quv~b zeS2)y~R2Z?~77?w05@ z?&h>K=kKevo`6iw^YN}(>)~{n%Vx8JjblPw{cPW=5?efmTP~O(-mTW9-;n;?=}kN4 z;uUF)xN_P%jn66avE!}4c&5@bebvCTc8s%AO-!0)I&j(sk)vEKU1x}Hf<|{Oq6z8t z)_c|e5*Jw|H+7(*i;aR7Z5)Lue*XGvD4f`9^}k0)QgPiLa_x5R4cBzPDYyK5Zuw;O zT$?}_+^l=wuO#XDRNO@TQ#7J*8A4d#NYz74_Qofm7>X<*x0R*D$fTK1DPN>)r;2>F zs{LZ=j!Eqqd!1Dub-ffJu_D{x&_zJEi~jh2O{)N+z=Dy*^Jhc+Jg}OlR%I&sjemrf zz)Uw8b?Ulv#|q&PY`Q#Rxlcqzp;OY0g(N(s9&vbNFGiw0@K{e)JIno82uH~6bkVV# z%x%3{aYJ3zNjRwOUQcGqP4$k3fa>~nAR}uU*JQkD&)m~f{$=6U5DPK17}Z*wy}UG) zyxy@^Jpnco5i#uQjFRFe(W0%gJP2mycV-uRk=1iG20kmL){L>1W{-b{m0Yo!Pg#4J z3;ylFuk9{R37V?g1)*@`;COjwy5y;$LF#b_t1%AO)iv4Op57;WZa6;Op>!_u#3w~_ zR)vppCAW_t@$!d>CP%7|Fy^rMrOU1`$BccX`B>BtHtg-q#!QHFUb=v`ky8;uyC-Jl zQ};SJoQQAEn9=RjJT3temPNGHi=mqaK^;S5gM^K55k{~lj2I+7+2n`s#QO&6>u>s& z*!37_+F)86)Wp;yACe8B@BnRySwA(j3W~ZO!GGR}>jSBeZXq&~zC(iDim*pZ!S4ZW z0uLK5QA5TTk{+TCO`cPq3V(~5@g9elWiETIE3l>+CZGm}M!mjPs zu7E+B2%Ey5+;$TkFUI3DzpaqTZFU7v{;n0{Mi-i5Mv_=p}1dV`${yLO z$sPL{f1F++YHdgsf65a2i-~{+-BZ6d2F%pe5vXF9rmIh-h`n9{e8j6XC>r=kaK4oY zRKjTqfyp;HT5VPYz+f?-+KbsCm`mQFBuL|=;v)FM;o-emj=>Nq{ZXwpEiapBZl_@lH5>T# zE{Ail!eLpGCoeV+2P4N#Bcmqma$a6U)w-gt;!t(V9I5G_!FmIOUDZXW0S1e%1Q`j- zQUS{O=Cjh;^^J(hx{!WSwENWfcC$(N?r6fPdTg4>=AqD>5z@rRM-abV<~7lHE(@o( zuFN_phDV7Ab3Qmkr8$OOubr+=nt>6s6nM9{E;{hd=>z56R|iz`xKr7-NwF z0}``tMc-U7NJ2syBUyGu6gvaC0KUW<(y7EG5(p!{jtbKHpigK>`#r#qy+tBUuoCmZ z62z{Bmy~woLp}Q-EI{vN-bRC<`tQ~QxfP-ep_xM6*>La^fBAx!-7(F@vi&ujO(dKdR1 z;xZT-I5-;r{$)8Hiy-~eQ%g!RL3ukJ?XUmIkV4gv3Du*wM`>{e_6y8*JzT9$u&~cu z9T;yUKQ%!`xz|xFxI1L?2j8pWs;b!+hmA5m%YAmbh zt-|4y{&mjxl9FjVAyYcd6p5&*3?`_b;DoRs?MQgRbID3%^;@Naj7p1nbE%Jc1Tb-t zhm~xlt?1PBrHu5)OI6;%Smrf#WZO%PPTNbq*9|tJ<^z{fKI*|mO=%k@M8#c`OmvIg z&Io*$_=qa4Sc|Z*Wk$}0ToZ)PM^(PT`s^yrMLlLqc~2ld;q5Iw#+TWq0N>OTk zzpLyb=0zeTM6%*lC9Z-!=~dC6D5je^kQi;w1oO|aw{u%nl1=O6RwCZ8P|9s+&JV02 zj&X#4BpRD%5la_M$V zYGJ%Q&<7TIY^ASLfv$sQVKi}}XUOqa6CwDq%I|j4Kv0-8GsX^LM@|klPgA##*Vn%| z7O;6bCCOB~`P9pnXGbD6kD>-F#RIMk_;2wM)&C49KBQ>ZU<1)Fl|)2RbrSPDZ@d7P zQSC(U-Pimd=S53u2}1rR447;o@CZ7<)*&#%tMRFLKhKgGQm^0ZhK2y;kNl{G2KiAD z*2NSM&4(A!EYc-AUF^k`vnCJONj_i#BhYKY8(LY5$??d>*qGCrSFtyYgMDS<)}fmR z5n=%ci*$}33unOJ`OP++FwfqKMqCl^PU{}01=_dtmpEjqQ@+0c_>JFpyo3x&np-NJFpX&Zg2s-mDaY14+QSi7jgU6kPK|!xyR-q7B1xa%@_cM>@ zgP`?dZin3||8q;84=f$SE{PTvK^xejTfelvia_~fDk+{Ba}CyA=6_{cqHRgv?`Uz` zBz3v$t}-_`N5`ca+sLR?11prF8{ne1cG=ba9{8dgz~?9gT86+`S@5%j(9JYnDty@% zwxpoNDv2g=FF12DtT3w>{s5HS;}sO`?Q99c%dygFxA$2gw`>TPO8v-!gu168Hb#MK zJ6Z_CF4fP+wt21>(eE5P@Fowxc(9hVvtZuRd5+DH9KL*qg-Mz<#dJ!wHv%WT4@ce{ zg1m4q*x5vGQoJ(I4;5C8P9+*5q+IoD?0`e&yGXRwkEp>^0tE{5EtnbX;Hf&$hekHm zaBXMvXr)|3lX{Tr-XF^*U)!kovQ=l5jo3StF?Q9500Y8|K?!)oj%;x2OT4I*Ym@nU zY++&~>jy3nks~IsbkYRbZHfgSwFH9^HLTW@g0$t(F+vNOYsX+r6yJ3ds$nwF(?ejg zfPSjUvPB4;IfkZ%q;pp2W&r-!NfCEu0$T7lwMda2-<&CIus6?OyX6`TENp6*(pr{*&J2JPi zngNa?(c~}$v0=Yq|9d1q5vE3>;`X2>DuRj$I3$^WcSz$97D3Lv@6YS9v*;(*=q3-K z)5xUM9bHC@0fQfyp09toM|oI*bSf^0fgl+cS>-R&^k`nm>8x@j$Sn3`+-0h_kQp_* zHeDdjFYM`pp)gw}xmsxC3a_4NEwmd^CApp!<9&PQXtt53LZJHDmu$e|8UrUMxQoM} z{6>gQ9y(dR`YtV-Pn~+NY%g5ic9Mj3xbGl2yE3y?BIH|O1lRn<7%JwXi;xj0RNozS z6RQd@IanAi5tkf%wgVaGmj>J+H4Xjf&SMfqppGWQe*B)NbpMJo-EIQ z=a59d|8Yo`@smtSM|$DCspgG^{Ckd(THswd z;G~cJ;;f3>0nKXKq(gf>+QQ-X+c;uCJ2d zsT4S7{0>9y@u|%Q#Y%OHYCcNj9150XT`Frt`5N z)}e;m)oA`-ol>Q8^&pxkh2&Q2Vz|Z0NG`5Ri2cK1`cgNa~^KpELGrsiC84(R8OzoetB-; zS9EofNX)+iqZ=Qda{n3NP(F8#sko`mn|=xf12+3d0`Mraq8c{pRFU{A5kNicKQ(yI zWOnaSgma39RaD}lWD3*_IG>Au9CBpl_(!stO(W&e>D`L7Wx7i=c; z1;d zuqC0ftTS^@AQAIjsj&2){;Y57FO&&jY+j6=#rk_K`V4Nf7>4JBfUN}Tm{c^wYF9)g zyH5$+xqlYZcOSY{YRTz+3a^B@a{R7$oA* zRL?BbnmFJqUYz4F(dT7TGNC^G`cT*`lAqAz-6HvIY|~UzreWqna!YfBs|v3^4Vj|q zFwRFCimT=`B9J}y%1o4=1nB;H%KI&SM8Q6$%1W3~JsRLv&IQw#Ke5d$cis%B!HA#A ziy9F0XGu}6)jY!aeRQav~6=s&Bp-?M;zg>;P-5^#MPwV{!1FV08afMIokhmUaMu%8>}Ea zZ^l0C#kPIXVpFJUoLo;VPNra|10nfpUB8s2uz^R-QZl(cgD`EInU#)XOHNuJ9pjQ( zxV-nURPJ!^mzpER7rz)4I$U`u0(y7c8E-ca$sMf?0b5tT zx)+n^dcBt9in4UxM_IbMY~B|&&?QKMJiV8@)D?b31V%W;%j~8kovzK1{ZM6Med(sQXwp=t1Q;axxA0I_jKt)! z_F7F@VAf!cML(e!w8K(;iSh@W95Ak|FIsRa{Fu*2&^sY}7Z?pu+#e{6aWQW5H~4;# zI5=8|3t-OVq{L=>kLSn7%s1CB-YuxAE}?#DSwnF!*vKR_*Zn6W)(FIZ)jh87IRVm9gIiIF@8 z)1J$TaFp|hJkfn12G(e$?c0Cn6XbsCUDfs7E7@e9OzvrDM~6_te6htF$ePP)2zMB| zs}!A&T2#v_;y4C$Oq=*E?210G-8*@t!(;62N}%^Mpg`SQ@Qch$QV2uLe28STCNDwa2CT=GiudL6&n$+BW0o3{f< zD10hXMe^75x9N6ehYA>`9bKQodL}Om@>Q)>%Cr8g&HRvnZ*y{I})x?<7Yz&_(C#e@Sh=>vjo9 ziO9u6JyAjYwYU<&k?%7kPIdJQcI$m);xVCme6!FaP7@!+l#pT5)P6|&Otki&OQtkbI{oAjZZJ)?y~KAqO^E{h*;aY2xx+_m_}Qmk}@rRLNh zruGPiPc1f;M#BEt@=_K-?V$vcn@D|(w9m7)SJ9*^18}`#pC*m*Y?MUqpd5fq3bU8X_d}qGDu{3h(DY3;ROi z0C{XLjq}cBwxniK)8(kyFP<6-mJX>wLqX3`9gtKUA9%cK%@aGn_dp!G-r>#ULL%mV zo4g|Bvtu2#WU_{;x*&^)!TVJ{tmhqavd8~4LcqfLGS9Kl(_4Vb|2tcDm@LL~pshM5 zrE=;~+T0Thb^dI4O*h*#P(Tuvhpwp9t5l}GRk`*?vs!=cgmSl+D;Ww2x(y<+C5VU* z6@w2qW3j2YecfwB9a+0zL^>1|7guCau4X2ts4Gq9u~H%5Hwdy=Gg4CHkxlVwB*Dw&VH)& zfWcX4C}+{WH7uf{%~T6kxlDT9EYTdyGE>xR{{Ql-|4ZCBZp!kTHTTwelAtJB#gIs{ zwxZMALv}3kZ|}(Fjn3l(*a~Lh-ykTc^(mIa1+=t#BPo2(%Tlpw+Cx5E>Az2^VQ@`t?5VC#&p-HJ*dP$^Wt7H-NNIGx%^pcsMxKRVIfq@L!zQ{oP)D zF4YMxQEw5v3;2lA*HYiUCx*|yp79KdP#IIm;_QTPj!*i*gn1((VhU)U8zTg{)tbO%k5kN$f1#H@q#2Cy~Fmv=<|?9C6V)fqTDS&o@B zz>S3oP3j_QqIC)XNee7EDQr+P?5iyg{?Y@~QZ;bi|L3E;xJ7XN(On1DdoN-nhHs_* z-aW4p-`2rVklY}IfAfO$q3JRIvGsqpM~H)ksnJ0}fP=+JuD~14Idpzmvv4FO#sF>Y=r;- diff --git a/prototype/etc/prototype.ucls b/prototype/etc/prototype.ucls deleted file mode 100644 index 6d19fdc23..000000000 --- a/prototype/etc/prototype.ucls +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/prototype/etc/prototype.urm.puml b/prototype/etc/prototype.urm.puml deleted file mode 100644 index 801679fb7..000000000 --- a/prototype/etc/prototype.urm.puml +++ /dev/null @@ -1,82 +0,0 @@ -@startuml -package com.iluwatar.prototype { - class App { - - LOGGER : Logger {static} - + App() - + main(args : String[]) {static} - } - abstract class Beast { - + Beast() - + clone() : Beast {abstract} - } - class ElfBeast { - + ElfBeast() - + clone() : Beast - + toString() : String - } - class ElfMage { - + ElfMage() - + clone() : Mage - + toString() : String - } - class ElfWarlord { - + ElfWarlord() - + clone() : Warlord - + toString() : String - } - interface HeroFactory { - + createBeast() : Beast {abstract} - + createMage() : Mage {abstract} - + createWarlord() : Warlord {abstract} - } - class HeroFactoryImpl { - - beast : Beast - - mage : Mage - - warlord : Warlord - + HeroFactoryImpl(mage : Mage, warlord : Warlord, beast : Beast) - + createBeast() : Beast - + createMage() : Mage - + createWarlord() : Warlord - } - abstract class Mage { - + Mage() - + clone() : Mage {abstract} - } - class OrcBeast { - + OrcBeast() - + clone() : Beast - + toString() : String - } - class OrcMage { - + OrcMage() - + clone() : Mage - + toString() : String - } - class OrcWarlord { - + OrcWarlord() - + clone() : Warlord - + toString() : String - } - abstract class Prototype { - + Prototype() - + clone() : Object {abstract} - } - abstract class Warlord { - + Warlord() - + clone() : Warlord {abstract} - } -} -HeroFactoryImpl --> "-beast" Beast -HeroFactoryImpl --> "-warlord" Warlord -HeroFactoryImpl --> "-mage" Mage -Beast --|> Prototype -ElfBeast --|> Beast -ElfMage --|> Mage -ElfWarlord --|> Warlord -HeroFactoryImpl ..|> HeroFactory -Mage --|> Prototype -OrcBeast --|> Beast -OrcMage --|> Mage -OrcWarlord --|> Warlord -Warlord --|> Prototype -@enduml \ No newline at end of file diff --git a/prototype/etc/prototype_1.png b/prototype/etc/prototype_1.png deleted file mode 100644 index 8b513c8d20f3dc21ad8377e041223e9b554c79ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97668 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

NDS-aRNdDlf;n|O{E&gm- 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 Mtg1`};!)852fNqrh5!Hn From 2a7feba427873136bb96c6dbdeb3ee11d6374718 Mon Sep 17 00:00:00 2001 From: "mahendran.mookkiah" Date: Fri, 18 Aug 2017 14:18:43 -0400 Subject: [PATCH 24/27] #587 SonarQube reports bugs As recommended in https://sonarcloud.io/organizations/default/rules#rule_key=squid%3AS2274 Used while insteadof if - for waiting upon a condition. --- .../iluwatar/async/method/invocation/ThreadAsyncExecutor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java index f92792c39..d12ebbe19 100644 --- a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java +++ b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java @@ -139,7 +139,7 @@ public class ThreadAsyncExecutor implements AsyncExecutor { @Override public void await() throws InterruptedException { synchronized (lock) { - if (!isCompleted()) { + while (!isCompleted()) { lock.wait(); } } From fbf5ffe67a63ddb43f003efeb6a1fc81bdf05ee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 19 Aug 2017 10:00:18 +0300 Subject: [PATCH 25/27] #590 Add explanation for Adapter --- adapter/README.md | 82 +++++++++++++++++- adapter/etc/adapter.png | Bin 12086 -> 0 bytes adapter/etc/adapter.ucls | 70 --------------- adapter/etc/adapter.urm.puml | 37 -------- .../main/java/com/iluwatar/adapter/App.java | 14 +-- .../java/com/iluwatar/adapter/Captain.java | 27 +++--- .../com/iluwatar/adapter/FishingBoat.java | 9 +- ...shingBoat.java => FishingBoatAdapter.java} | 20 ++--- .../{BattleShip.java => RowingBoat.java} | 8 +- .../iluwatar/adapter/AdapterPatternTest.java | 29 +++---- pom.xml | 1 + 11 files changed, 121 insertions(+), 176 deletions(-) delete mode 100644 adapter/etc/adapter.png delete mode 100644 adapter/etc/adapter.ucls delete mode 100644 adapter/etc/adapter.urm.puml rename adapter/src/main/java/com/iluwatar/adapter/{BattleFishingBoat.java => FishingBoatAdapter.java} (70%) rename adapter/src/main/java/com/iluwatar/adapter/{BattleShip.java => RowingBoat.java} (92%) diff --git a/adapter/README.md b/adapter/README.md index 4059ea852..6de04a72c 100644 --- a/adapter/README.md +++ b/adapter/README.md @@ -19,10 +19,85 @@ Convert the interface of a class into another interface the clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. -![alt text](./etc/adapter.png "Adapter") +## Explanation -## General usage of Adapter Pattern: -+ Wrappers used to adopt 3rd parties libraries and frameworks - most of the applications using third party libraries use adapters as a middle layer between the application and the 3rd party library to decouple the application from the library. If another library has to be used only an adapter for the new library is required without having to change the application code. +Real world example + +> Consider that you have some pictures in your memory card and you need to transfer them to your computer. In order to transfer them you need some kind of adapter that is compatible with your computer ports so that you can attach memory card to your computer. In this case card reader is an adapter. +> Another example would be the famous power adapter; a three legged plug can't be connected to a two pronged outlet, it needs to use a power adapter that makes it compatible with the two pronged outlet. +> Yet another example would be a translator translating words spoken by one person to another + +In plain words + +> Adapter pattern lets you wrap an otherwise incompatible object in an adapter to make it compatible with another class. + +Wikipedia says + +> In software engineering, the adapter pattern is a software design pattern that allows the interface of an existing class to be used as another interface. It is often used to make existing classes work with others without modifying their source code. + +**Programmatic Example** + +Consider a captain that can only use rowing boats and cannot sail at all. + +First we have interfaces `RowingBoat` and `FishingBoat` + +``` +public interface RowingBoat { + void row(); +} + +public class FishingBoat { + private static final Logger LOGGER = LoggerFactory.getLogger(FishingBoat.class); + public void sail() { + LOGGER.info("The fishing boat is sailing"); + } +} +``` + +And captain expects an implementation of `RowingBoat` interface to be able to move + +``` +public class Captain implements RowingBoat { + + private RowingBoat rowingBoat; + + public Captain(RowingBoat rowingBoat) { + this.rowingBoat = rowingBoat; + } + + @Override + public void row() { + rowingBoat.row(); + } +} +``` + +Now let's say the pirates are coming and our captain needs to escape but there is only fishing boat available. We need to create an adapter that allows the captain to operate the fishing boat with his rowing boat skills. + +``` +public class FishingBoatAdapter implements RowingBoat { + + private static final Logger LOGGER = LoggerFactory.getLogger(FishingBoatAdapter.class); + + private FishingBoat boat; + + public FishingBoatAdapter() { + boat = new FishingBoat(); + } + + @Override + public void row() { + boat.sail(); + } +} +``` + +And now the `Captain` can use the `FishingBoat` to escape the pirates. + +``` +Captain captain = new Captain(new FishingBoatAdapter()); +captain.row(); +``` ## Applicability Use the Adapter pattern when @@ -30,6 +105,7 @@ Use the Adapter pattern when * you want to use an existing class, and its interface does not match the one you need * you want to create a reusable class that cooperates with unrelated or unforeseen classes, that is, classes that don't necessarily have compatible interfaces * you need to use several existing subclasses, but it's impractical to adapt their interface by subclassing every one. An object adapter can adapt the interface of its parent class. +* most of the applications using third party libraries use adapters as a middle layer between the application and the 3rd party library to decouple the application from the library. If another library has to be used only an adapter for the new library is required without having to change the application code. ## Consequences: Class and object adapters have different trade-offs. A class adapter diff --git a/adapter/etc/adapter.png b/adapter/etc/adapter.png deleted file mode 100644 index f43358b042e73edcbcb9589e540a8d306fa1d6c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12086 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 diff --git a/adapter/etc/adapter.ucls b/adapter/etc/adapter.ucls deleted file mode 100644 index 290ff544e..000000000 --- a/adapter/etc/adapter.ucls +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/adapter/etc/adapter.urm.puml b/adapter/etc/adapter.urm.puml deleted file mode 100644 index 847427a44..000000000 --- a/adapter/etc/adapter.urm.puml +++ /dev/null @@ -1,37 +0,0 @@ -@startuml -package com.iluwatar.adapter { - class App { - + App() - + main(args : String[]) {static} - } - class BattleFishingBoat { - - LOGGER : Logger {static} - - boat : FishingBoat - + BattleFishingBoat() - + fire() - + move() - } - interface BattleShip { - + fire() {abstract} - + move() {abstract} - } - class Captain { - - battleship : BattleShip - + Captain() - + Captain(battleship : BattleShip) - + fire() - + move() - + setBattleship(battleship : BattleShip) - } - class FishingBoat { - - LOGGER : Logger {static} - + FishingBoat() - + fish() - + sail() - } -} -BattleFishingBoat --> "-boat" FishingBoat -Captain --> "-battleship" BattleShip -BattleFishingBoat ..|> BattleShip -Captain ..|> BattleShip -@enduml \ No newline at end of file diff --git a/adapter/src/main/java/com/iluwatar/adapter/App.java b/adapter/src/main/java/com/iluwatar/adapter/App.java index 239424da9..a624cc38f 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/App.java +++ b/adapter/src/main/java/com/iluwatar/adapter/App.java @@ -34,14 +34,14 @@ package com.iluwatar.adapter; * object. This example uses the object adapter approach. * *

- * The Adapter ({@link BattleFishingBoat}) converts the interface of the adaptee class ( - * {@link FishingBoat}) into a suitable one expected by the client ( {@link BattleShip} ). + * The Adapter ({@link FishingBoatAdapter}) converts the interface of the adaptee class ( + * {@link FishingBoat}) into a suitable one expected by the client ( {@link RowingBoat} ). * *

* The story of this implementation is this.
- * Pirates are coming! we need a {@link BattleShip} to fight! We have a {@link FishingBoat} and our + * Pirates are coming! we need a {@link RowingBoat} to flee! We have a {@link FishingBoat} and our * captain. We have no time to make up a new ship! we need to reuse this {@link FishingBoat}. The - * captain needs a battleship which can fire and move. The spec is in {@link BattleShip}. We will + * captain needs a rowing boat which he can operate. The spec is in {@link RowingBoat}. We will * use the Adapter pattern to reuse {@link FishingBoat}. * */ @@ -53,8 +53,8 @@ public class App { * @param args command line args */ public static void main(String[] args) { - Captain captain = new Captain(new BattleFishingBoat()); - captain.move(); - captain.fire(); + // The captain can only operate rowing boats but with adapter he is able to use fishing boats as well + Captain captain = new Captain(new FishingBoatAdapter()); + captain.row(); } } diff --git a/adapter/src/main/java/com/iluwatar/adapter/Captain.java b/adapter/src/main/java/com/iluwatar/adapter/Captain.java index 6d88b1975..369016980 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/Captain.java +++ b/adapter/src/main/java/com/iluwatar/adapter/Captain.java @@ -23,33 +23,26 @@ package com.iluwatar.adapter; /** - * The Captain uses {@link BattleShip} to fight.
+ * The Captain uses {@link RowingBoat} to sail.
* This is the client in the pattern. */ -public class Captain implements BattleShip { +public class Captain implements RowingBoat { - private BattleShip battleship; + private RowingBoat rowingBoat; - public Captain() { + public Captain() {} + public Captain(RowingBoat rowingBoat) { + this.rowingBoat = rowingBoat; } - public Captain(BattleShip battleship) { - this.battleship = battleship; - } - - public void setBattleship(BattleShip battleship) { - this.battleship = battleship; + public void setRowingBoat(RowingBoat rowingBoat) { + this.rowingBoat = rowingBoat; } @Override - public void fire() { - battleship.fire(); - } - - @Override - public void move() { - battleship.move(); + public void row() { + rowingBoat.row(); } } diff --git a/adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java b/adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java index 2124d9d9f..c46814d18 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java +++ b/adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java @@ -27,7 +27,8 @@ import org.slf4j.LoggerFactory; /** * - * Device class (adaptee in the pattern). We want to reuse this class + * Device class (adaptee in the pattern). We want to reuse this class. + * Fishing boat moves by sailing. * */ public class FishingBoat { @@ -35,11 +36,7 @@ public class FishingBoat { private static final Logger LOGGER = LoggerFactory.getLogger(FishingBoat.class); public void sail() { - LOGGER.info("The Boat is moving to that place"); - } - - public void fish() { - LOGGER.info("fishing ..."); + LOGGER.info("The fishing boat is sailing"); } } diff --git a/adapter/src/main/java/com/iluwatar/adapter/BattleFishingBoat.java b/adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java similarity index 70% rename from adapter/src/main/java/com/iluwatar/adapter/BattleFishingBoat.java rename to adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java index 5e4da91f8..c94932b2b 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/BattleFishingBoat.java +++ b/adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java @@ -27,30 +27,22 @@ import org.slf4j.LoggerFactory; /** * - * Adapter class. Adapts the interface of the device ({@link FishingBoat}) into {@link BattleShip} - * interface expected by the client ({@link Captain}).
- * In this case we added a new function fire to suit the interface. We are reusing the - * {@link FishingBoat} without changing itself. The Adapter class can just map the functions of the - * Adaptee or add, delete features of the Adaptee. + * Adapter class. Adapts the interface of the device ({@link FishingBoat}) into {@link RowingBoat} + * interface expected by the client ({@link Captain}). * */ -public class BattleFishingBoat implements BattleShip { +public class FishingBoatAdapter implements RowingBoat { - private static final Logger LOGGER = LoggerFactory.getLogger(BattleFishingBoat.class); + private static final Logger LOGGER = LoggerFactory.getLogger(FishingBoatAdapter.class); private FishingBoat boat; - public BattleFishingBoat() { + public FishingBoatAdapter() { boat = new FishingBoat(); } @Override - public void fire() { - LOGGER.info("fire!"); - } - - @Override - public void move() { + public void row() { boat.sail(); } } diff --git a/adapter/src/main/java/com/iluwatar/adapter/BattleShip.java b/adapter/src/main/java/com/iluwatar/adapter/RowingBoat.java similarity index 92% rename from adapter/src/main/java/com/iluwatar/adapter/BattleShip.java rename to adapter/src/main/java/com/iluwatar/adapter/RowingBoat.java index 62ee366e7..a9ca9ad39 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/BattleShip.java +++ b/adapter/src/main/java/com/iluwatar/adapter/RowingBoat.java @@ -24,13 +24,11 @@ package com.iluwatar.adapter; /** * The interface expected by the client.
- * A Battleship can fire and move. + * A rowing boat is rowed to move. * */ -public interface BattleShip { +public interface RowingBoat { - void fire(); - - void move(); + void row(); } diff --git a/adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java b/adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java index 89c9bc5d5..9938f0559 100644 --- a/adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java +++ b/adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java @@ -39,9 +39,9 @@ public class AdapterPatternTest { private Map beans; - private static final String BATTLESHIP_BEAN = "engineer"; + private static final String FISHING_BEAN = "fisher"; - private static final String CAPTAIN_BEAN = "captain"; + private static final String ROWING_BEAN = "captain"; /** * This method runs before the test execution and sets the bean objects in the beans Map. @@ -50,34 +50,29 @@ public class AdapterPatternTest { public void setup() { beans = new HashMap<>(); - BattleFishingBoat battleFishingBoat = spy(new BattleFishingBoat()); - beans.put(BATTLESHIP_BEAN, battleFishingBoat); + FishingBoatAdapter fishingBoatAdapter = spy(new FishingBoatAdapter()); + beans.put(FISHING_BEAN, fishingBoatAdapter); Captain captain = new Captain(); - captain.setBattleship((BattleFishingBoat) beans.get(BATTLESHIP_BEAN)); - beans.put(CAPTAIN_BEAN, captain); + captain.setRowingBoat((FishingBoatAdapter) beans.get(FISHING_BEAN)); + beans.put(ROWING_BEAN, captain); } /** - * This test asserts that when we use the move() method on a captain bean(client), it is - * internally calling move method on the battleship object. The Adapter ({@link BattleFishingBoat} + * This test asserts that when we use the row() method on a captain bean(client), it is + * internally calling sail method on the fishing boat object. The Adapter ({@link FishingBoatAdapter} * ) converts the interface of the target class ( {@link FishingBoat}) into a suitable one * expected by the client ({@link Captain} ). */ @Test public void testAdapter() { - BattleShip captain = (BattleShip) beans.get(CAPTAIN_BEAN); + RowingBoat captain = (RowingBoat) beans.get(ROWING_BEAN); // when captain moves - captain.move(); + captain.row(); // the captain internally calls the battleship object to move - BattleShip battleship = (BattleShip) beans.get(BATTLESHIP_BEAN); - verify(battleship).move(); - - // same with above with firing - captain.fire(); - verify(battleship).fire(); - + RowingBoat adapter = (RowingBoat) beans.get(FISHING_BEAN); + verify(adapter).row(); } } diff --git a/pom.xml b/pom.xml index 992537f9b..347a6bc15 100644 --- a/pom.xml +++ b/pom.xml @@ -466,6 +466,7 @@ abstract-factory builder prototype + adapter From 5db6776971094dc4e67287cc735c3e47a0dbfb9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 19 Aug 2017 10:10:49 +0300 Subject: [PATCH 26/27] #590 Fix PMD issue --- .../main/java/com/iluwatar/adapter/FishingBoatAdapter.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java b/adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java index c94932b2b..1e758e917 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java +++ b/adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java @@ -22,9 +22,6 @@ */ package com.iluwatar.adapter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * * Adapter class. Adapts the interface of the device ({@link FishingBoat}) into {@link RowingBoat} @@ -33,8 +30,6 @@ import org.slf4j.LoggerFactory; */ public class FishingBoatAdapter implements RowingBoat { - private static final Logger LOGGER = LoggerFactory.getLogger(FishingBoatAdapter.class); - private FishingBoat boat; public FishingBoatAdapter() { From ed1a0022b9875dd8b168bd48eded37218940f103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 19 Aug 2017 11:00:34 +0300 Subject: [PATCH 27/27] #596 Add more logging to Reactor --- .../java/com/iluwatar/reactor/app/AppClient.java | 10 ++++++---- .../com/iluwatar/reactor/framework/NioReactor.java | 5 +++-- .../java/com/iluwatar/reactor/app/ReactorTest.java | 13 +++++++++++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java b/reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java index 4db4f5e2a..446628769 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java +++ b/reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java @@ -65,6 +65,7 @@ public class AppClient { * @throws IOException if any I/O error occurs. */ public void start() throws IOException { + LOGGER.info("Starting logging clients"); service.execute(new TcpLoggingClient("Client 1", 6666)); service.execute(new TcpLoggingClient("Client 2", 6667)); service.execute(new UdpLoggingClient("Client 3", 6668)); @@ -81,16 +82,17 @@ public class AppClient { try { service.awaitTermination(1000, TimeUnit.SECONDS); } catch (InterruptedException e) { - e.printStackTrace(); + LOGGER.error("exception awaiting termination", e); } } + LOGGER.info("Logging clients stopped"); } private static void artificialDelayOf(long millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { - e.printStackTrace(); + LOGGER.error("sleep interrupted", e); } } @@ -119,7 +121,7 @@ public class AppClient { PrintWriter writer = new PrintWriter(outputStream); sendLogRequests(writer, socket.getInputStream()); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("error sending requests", e); throw new RuntimeException(e); } } @@ -185,7 +187,7 @@ public class AppClient { artificialDelayOf(100); } } catch (IOException e1) { - e1.printStackTrace(); + LOGGER.error("error sending packets", e1); } } } diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java b/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java index bc5b27494..a315389a3 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java @@ -94,7 +94,7 @@ public class NioReactor { LOGGER.info("Reactor started, waiting for events..."); eventLoop(); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("exception in event loop", e); } }); } @@ -112,6 +112,7 @@ public class NioReactor { selector.wakeup(); reactorMain.awaitTermination(4, TimeUnit.SECONDS); selector.close(); + LOGGER.info("Reactor stopped"); } /** @@ -206,7 +207,7 @@ public class NioReactor { try { key.channel().close(); } catch (IOException e1) { - e1.printStackTrace(); + LOGGER.error("error closing channel", e1); } } } diff --git a/reactor/src/test/java/com/iluwatar/reactor/app/ReactorTest.java b/reactor/src/test/java/com/iluwatar/reactor/app/ReactorTest.java index 413bbc017..7aa80f8cc 100644 --- a/reactor/src/test/java/com/iluwatar/reactor/app/ReactorTest.java +++ b/reactor/src/test/java/com/iluwatar/reactor/app/ReactorTest.java @@ -24,10 +24,13 @@ package com.iluwatar.reactor.app; import java.io.IOException; +import com.iluwatar.reactor.framework.NioReactor; import org.junit.Test; import com.iluwatar.reactor.framework.SameThreadDispatcher; import com.iluwatar.reactor.framework.ThreadPoolDispatcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -36,6 +39,8 @@ import com.iluwatar.reactor.framework.ThreadPoolDispatcher; */ public class ReactorTest { + private static final Logger LOGGER = LoggerFactory.getLogger(ReactorTest.class); + /** * Test the application using pooled thread dispatcher. * @@ -44,6 +49,7 @@ public class ReactorTest { */ @Test public void testAppUsingThreadPoolDispatcher() throws IOException, InterruptedException { + LOGGER.info("testAppUsingThreadPoolDispatcher start"); App app = new App(new ThreadPoolDispatcher(2)); app.start(); @@ -54,12 +60,13 @@ public class ReactorTest { try { Thread.sleep(2000); } catch (InterruptedException e) { - e.printStackTrace(); + LOGGER.error("sleep interrupted", e); } client.stop(); app.stop(); + LOGGER.info("testAppUsingThreadPoolDispatcher stop"); } /** @@ -70,6 +77,7 @@ public class ReactorTest { */ @Test public void testAppUsingSameThreadDispatcher() throws IOException, InterruptedException { + LOGGER.info("testAppUsingSameThreadDispatcher start"); App app = new App(new SameThreadDispatcher()); app.start(); @@ -80,11 +88,12 @@ public class ReactorTest { try { Thread.sleep(2000); } catch (InterruptedException e) { - e.printStackTrace(); + LOGGER.error("sleep interrupted", e); } client.stop(); app.stop(); + LOGGER.info("testAppUsingSameThreadDispatcher stop"); } }