From 09b577f6340be71ca70160e04988508f0d54629f Mon Sep 17 00:00:00 2001 From: zWeBrain <46642512+zWeBrain@users.noreply.github.com> Date: Mon, 26 Apr 2021 16:15:52 +0800 Subject: [PATCH] task: Add Composite Entity pattern (#1705) * add composite entity pattern * add composite entity pattern * Update ReactorTest.java * resolve some code quality problems * modified a lot * remove some extra codes * modified README * removed the author name and adjusted the spacing Co-authored-by: zwebrain <11811721@mail.sustech.edu.cn> Co-authored-by: Subhrodip Mohanta --- composite-entity/README.md | 122 ++++++++++++++++++ .../etc/composite-entity.urm.puml | 45 +++++++ composite-entity/etc/composite_entity.urm.png | Bin 0 -> 91799 bytes composite-entity/pom.xml | 39 ++++++ .../com/iluwatar/compositeentity/App.java | 38 ++++++ .../compositeentity/CoarseGrainedObject.java | 23 ++++ .../compositeentity/CompositeEntity.java | 23 ++++ .../ConsoleCoarseGrainedObject.java | 20 +++ .../compositeentity/DependentObject.java | 20 +++ .../MessageDependentObject.java | 9 ++ .../SignalDependentObject.java | 9 ++ .../com/iluwatar/compositeentity/AppTest.java | 25 ++++ .../compositeentity/PersistenceTest.java | 32 +++++ pom.xml | 1 + 14 files changed, 406 insertions(+) create mode 100644 composite-entity/README.md create mode 100644 composite-entity/etc/composite-entity.urm.puml create mode 100644 composite-entity/etc/composite_entity.urm.png create mode 100644 composite-entity/pom.xml create mode 100644 composite-entity/src/main/java/com/iluwatar/compositeentity/App.java create mode 100644 composite-entity/src/main/java/com/iluwatar/compositeentity/CoarseGrainedObject.java create mode 100644 composite-entity/src/main/java/com/iluwatar/compositeentity/CompositeEntity.java create mode 100644 composite-entity/src/main/java/com/iluwatar/compositeentity/ConsoleCoarseGrainedObject.java create mode 100644 composite-entity/src/main/java/com/iluwatar/compositeentity/DependentObject.java create mode 100644 composite-entity/src/main/java/com/iluwatar/compositeentity/MessageDependentObject.java create mode 100644 composite-entity/src/main/java/com/iluwatar/compositeentity/SignalDependentObject.java create mode 100644 composite-entity/src/test/java/com/iluwatar/compositeentity/AppTest.java create mode 100644 composite-entity/src/test/java/com/iluwatar/compositeentity/PersistenceTest.java diff --git a/composite-entity/README.md b/composite-entity/README.md new file mode 100644 index 000000000..4b4a3b9c3 --- /dev/null +++ b/composite-entity/README.md @@ -0,0 +1,122 @@ +--- +layout: pattern +title: Composite Entity +folder: composite-entity +permalink: /patterns/composite-entity/ +categories: Structural +tags: + - Enterprise Integration Pattern +--- + +## Intent + +It is used to model, represent, and manage a set of persistent objects that are interrelated, rather than representing them as individual fine-grained entities. + +## Explanation + +Real world example + +> For a console, there may be many interfaces that need to be managed and controlled. Using the composite entity pattern, dependent objects such as messages and signals can be combined together and controlled using a single object. + +In plain words + +> Composite entity pattern allows a set of related objects to be represented and managed by a unified object. + +**Programmatic Example** + +We need a generic solution for the problem. To achieve this, let's introduce a generic +Composite Entity Pattern. + +```java +public abstract class DependentObject { + + T data; + + public void setData(T message) { + this.data = message; + } + + public T getData() { + return data; + } +} + +public abstract class CoarseGrainedObject { + + DependentObject[] dependentObjects; + + public void setData(T... data) { + IntStream.range(0, data.length).forEach(i -> dependentObjects[i].setData(data[i])); + } + + public T[] getData() { + return (T[]) Arrays.stream(dependentObjects).map(DependentObject::getData).toArray(); + } +} + +``` + +The specialized composite entity `console` inherit from this base class as follows. + +```java +public class MessageDependentObject extends DependentObject { + +} + +public class SignalDependentObject extends DependentObject { + +} + +public class ConsoleCoarseGrainedObject extends CoarseGrainedObject { + + @Override + public String[] getData() { + super.getData(); + return new String[]{ + dependentObjects[0].getData(), dependentObjects[1].getData() + }; + } + + public void init() { + dependentObjects = new DependentObject[]{ + new MessageDependentObject(), new SignalDependentObject()}; + } +} + +public class CompositeEntity { + + private final ConsoleCoarseGrainedObject console = new ConsoleCoarseGrainedObject(); + + public void setData(String message, String signal) { + console.setData(message, signal); + } + + public String[] getData() { + return console.getData(); + } +} +``` + +Now managing the assignment of message and signal objects with the composite entity `console`. + +```java +var console = new CompositeEntity(); +console.init(); +console.setData("No Danger", "Green Light"); +Arrays.stream(console.getData()).forEach(LOGGER::info); +console.setData("Danger", "Red Light"); +Arrays.stream(console.getData()).forEach(LOGGER::info); +``` + +## Class diagram + +![alt text](./etc/composite_entity.urm.png "Composite Entity Pattern") + +## Applicability + +Use the Composite Entity Pattern in the following situation: + +* You want to manage multiple dependency objects through one object to adjust the degree of granularity between objects. At the same time, the lifetime of dependency objects depends on a coarse-grained object. +## Credits + +* [Composite Entity Pattern in wikipedia](https://en.wikipedia.org/wiki/Composite_entity_pattern) diff --git a/composite-entity/etc/composite-entity.urm.puml b/composite-entity/etc/composite-entity.urm.puml new file mode 100644 index 000000000..5ac4b9e65 --- /dev/null +++ b/composite-entity/etc/composite-entity.urm.puml @@ -0,0 +1,45 @@ +@startuml +package com.iluwatar.compositeentity { + class App { + + App(message: String, signal: String) + + main(args : String[]) {static} + } + class CompositeEntity{ + - console : ConsoleCoarseGrainedObject + + CompositeEntity() + + setData(message: String, signal: String) + + getData() + + init() + } + abstract CoarseGrainedObject{ + - dependentObjects : DependentObject[] + + CoarseGrainedObject() + + setData(data: T[]) + + getData() + } + abstract DependentObject{ + - data : T + + DependentObject() + + setData(data: T) + + getData() + } + class ConsoleCoarseGrainedObject{ + + ConsoleCoarseGrainedObject() + + getData() + + init() + } + class MessageDependentObject{ + + MessageDependentObject() + } + class SignalDependentObject{ + + SignalDependentObject() + } + + MessageDependentObject --|> DependentObject + SignalDependentObject --|> DependentObject + ConsoleCoarseGrainedObject --|> CoarseGrainedObject + CompositeEntity -right-> ConsoleCoarseGrainedObject + CoarseGrainedObject "1" o--> "0.." DependentObject + App .right.> CompositeEntity +} +@enduml diff --git a/composite-entity/etc/composite_entity.urm.png b/composite-entity/etc/composite_entity.urm.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c29a718837bda04012a62dd36b8520b21d07ef GIT binary patch literal 91799 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 Fe*r084gvrG literal 0 HcmV?d00001 diff --git a/composite-entity/pom.xml b/composite-entity/pom.xml new file mode 100644 index 000000000..fd05950a4 --- /dev/null +++ b/composite-entity/pom.xml @@ -0,0 +1,39 @@ + + + + java-design-patterns + com.iluwatar + 1.25.0-SNAPSHOT + + 4.0.0 + composite-entity + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + + + com.iluwatar.composite-entity.com.iluwatar.compositeentity.App + + + + + + + + + + \ No newline at end of file diff --git a/composite-entity/src/main/java/com/iluwatar/compositeentity/App.java b/composite-entity/src/main/java/com/iluwatar/compositeentity/App.java new file mode 100644 index 000000000..241bc5ce6 --- /dev/null +++ b/composite-entity/src/main/java/com/iluwatar/compositeentity/App.java @@ -0,0 +1,38 @@ +package com.iluwatar.compositeentity; + +import java.util.Arrays; +import lombok.extern.slf4j.Slf4j; + + +/** + * Composite entity is a Java EE Software design pattern and it is used to model, represent, and + * manage a set of interrelated persistent objects rather than representing them as individual + * fine-grained entity beans, and also a composite entity bean represents a graph of objects. + */ +@Slf4j +public class App { + + + /** + * An instance that a console manages two related objects. + */ + public App(String message, String signal) { + var console = new CompositeEntity(); + console.init(); + console.setData(message, signal); + Arrays.stream(console.getData()).forEach(LOGGER::info); + console.setData("Danger", "Red Light"); + Arrays.stream(console.getData()).forEach(LOGGER::info); + } + + /** + * Program entry point. + * + * @param args command line args + */ + public static void main(String[] args) { + + new App("No Danger", "Green Light"); + + } +} diff --git a/composite-entity/src/main/java/com/iluwatar/compositeentity/CoarseGrainedObject.java b/composite-entity/src/main/java/com/iluwatar/compositeentity/CoarseGrainedObject.java new file mode 100644 index 000000000..45e5d7959 --- /dev/null +++ b/composite-entity/src/main/java/com/iluwatar/compositeentity/CoarseGrainedObject.java @@ -0,0 +1,23 @@ +package com.iluwatar.compositeentity; + +import java.util.Arrays; +import java.util.stream.IntStream; + +/** + * A coarse-grained object is an object with its own life cycle manages its own relationships to + * other objects. It can be an object contained in the composite entity, or, composite entity itself + * can be the coarse-grained object which holds dependent objects. + */ + +public abstract class CoarseGrainedObject { + + DependentObject[] dependentObjects; + + public void setData(T... data) { + IntStream.range(0, data.length).forEach(i -> dependentObjects[i].setData(data[i])); + } + + public T[] getData() { + return (T[]) Arrays.stream(dependentObjects).map(DependentObject::getData).toArray(); + } +} diff --git a/composite-entity/src/main/java/com/iluwatar/compositeentity/CompositeEntity.java b/composite-entity/src/main/java/com/iluwatar/compositeentity/CompositeEntity.java new file mode 100644 index 000000000..70f067740 --- /dev/null +++ b/composite-entity/src/main/java/com/iluwatar/compositeentity/CompositeEntity.java @@ -0,0 +1,23 @@ +package com.iluwatar.compositeentity; + +/** + * Composite entity is the coarse-grained entity bean which may be the coarse-grained object, or may + * contain a reference to the coarse-grained object. + */ + +public class CompositeEntity { + + private final ConsoleCoarseGrainedObject console = new ConsoleCoarseGrainedObject(); + + public void setData(String message, String signal) { + console.setData(message, signal); + } + + public String[] getData() { + return console.getData(); + } + + public void init() { + console.init(); + } +} \ No newline at end of file diff --git a/composite-entity/src/main/java/com/iluwatar/compositeentity/ConsoleCoarseGrainedObject.java b/composite-entity/src/main/java/com/iluwatar/compositeentity/ConsoleCoarseGrainedObject.java new file mode 100644 index 000000000..635dd98ca --- /dev/null +++ b/composite-entity/src/main/java/com/iluwatar/compositeentity/ConsoleCoarseGrainedObject.java @@ -0,0 +1,20 @@ +package com.iluwatar.compositeentity; + +/** + * A specific CoarseGrainedObject to implement a console. + */ + +public class ConsoleCoarseGrainedObject extends CoarseGrainedObject { + + @Override + public String[] getData() { + return new String[]{ + dependentObjects[0].getData(), dependentObjects[1].getData() + }; + } + + public void init() { + dependentObjects = new DependentObject[]{ + new MessageDependentObject(), new SignalDependentObject()}; + } +} \ No newline at end of file diff --git a/composite-entity/src/main/java/com/iluwatar/compositeentity/DependentObject.java b/composite-entity/src/main/java/com/iluwatar/compositeentity/DependentObject.java new file mode 100644 index 000000000..ede4f473a --- /dev/null +++ b/composite-entity/src/main/java/com/iluwatar/compositeentity/DependentObject.java @@ -0,0 +1,20 @@ +package com.iluwatar.compositeentity; + +/** + * It is an object, which can contain other dependent objects (there may be a tree of objects within + * the composite entity), that depends on the coarse-grained object and has its life cycle managed + * by the coarse-grained object. + */ + +public abstract class DependentObject { + + T data; + + public void setData(T message) { + this.data = message; + } + + public T getData() { + return data; + } +} diff --git a/composite-entity/src/main/java/com/iluwatar/compositeentity/MessageDependentObject.java b/composite-entity/src/main/java/com/iluwatar/compositeentity/MessageDependentObject.java new file mode 100644 index 000000000..51e7c04df --- /dev/null +++ b/composite-entity/src/main/java/com/iluwatar/compositeentity/MessageDependentObject.java @@ -0,0 +1,9 @@ +package com.iluwatar.compositeentity; + +/** + * The first DependentObject to show message. + */ + +public class MessageDependentObject extends DependentObject { + +} \ No newline at end of file diff --git a/composite-entity/src/main/java/com/iluwatar/compositeentity/SignalDependentObject.java b/composite-entity/src/main/java/com/iluwatar/compositeentity/SignalDependentObject.java new file mode 100644 index 000000000..ff6691c29 --- /dev/null +++ b/composite-entity/src/main/java/com/iluwatar/compositeentity/SignalDependentObject.java @@ -0,0 +1,9 @@ +package com.iluwatar.compositeentity; + +/** + * The second DependentObject to show message. + */ + +public class SignalDependentObject extends DependentObject { + +} \ No newline at end of file diff --git a/composite-entity/src/test/java/com/iluwatar/compositeentity/AppTest.java b/composite-entity/src/test/java/com/iluwatar/compositeentity/AppTest.java new file mode 100644 index 000000000..5a84d8de3 --- /dev/null +++ b/composite-entity/src/test/java/com/iluwatar/compositeentity/AppTest.java @@ -0,0 +1,25 @@ +package com.iluwatar.compositeentity; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +import org.junit.jupiter.api.Test; + +/** + * com.iluwatar.compositeentity.App running test + */ +class AppTest { + + /** + * Issue: Add at least one assertion to this test case. + *

+ * Solution: Inserted assertion to check whether the execution of the main method in {@link + * App#main(String[])} throws an exception. + */ + + @Test + void shouldExecuteApplicationWithoutException() { + + assertDoesNotThrow(() -> App.main(new String[]{})); + + } +} diff --git a/composite-entity/src/test/java/com/iluwatar/compositeentity/PersistenceTest.java b/composite-entity/src/test/java/com/iluwatar/compositeentity/PersistenceTest.java new file mode 100644 index 000000000..010a99ebd --- /dev/null +++ b/composite-entity/src/test/java/com/iluwatar/compositeentity/PersistenceTest.java @@ -0,0 +1,32 @@ +package com.iluwatar.compositeentity; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PersistenceTest { + + final static ConsoleCoarseGrainedObject console = new ConsoleCoarseGrainedObject(); + + @Test + void dependentObjectChangedForPersistenceTest() { + MessageDependentObject dependentObject = new MessageDependentObject(); + console.init(); + console.dependentObjects[0] = dependentObject; + String message = "Danger"; + assertNull(console.dependentObjects[0].getData()); + dependentObject.setData(message); + assertEquals(message, console.dependentObjects[0].getData()); + } + + @Test + void coarseGrainedObjectChangedForPersistenceTest() { + MessageDependentObject dependentObject = new MessageDependentObject(); + console.init(); + console.dependentObjects[0] = dependentObject; + String message = "Danger"; + assertNull(console.dependentObjects[0].getData()); + console.setData(message); + assertEquals(message, dependentObject.getData()); + } +} diff --git a/pom.xml b/pom.xml index 4aac0a2a8..23e9dbb4d 100644 --- a/pom.xml +++ b/pom.xml @@ -224,6 +224,7 @@ parameter-object active-object model-view-viewmodel + composite-entity