From fcd500d3ae3f465cef77a92c1b7e6351dca04ac7 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Thu, 23 Apr 2015 22:51:21 +0300 Subject: [PATCH] Added comments and class diagram. --- specification/etc/specification.png | Bin 0 -> 50066 bytes specification/etc/specification.ucls | 212 ++++++++++++++++++ .../src/main/java/com/iluwatar/app/App.java | 14 ++ .../iluwatar/creature/AbstractCreature.java | 5 + .../java/com/iluwatar/creature/Creature.java | 5 + .../java/com/iluwatar/creature/Dragon.java | 5 + .../java/com/iluwatar/creature/Goblin.java | 5 + .../java/com/iluwatar/creature/KillerBee.java | 5 + .../java/com/iluwatar/creature/Octopus.java | 5 + .../java/com/iluwatar/creature/Shark.java | 5 + .../java/com/iluwatar/creature/Troll.java | 5 + .../java/com/iluwatar/property/Color.java | 5 + .../java/com/iluwatar/property/Movement.java | 5 + .../main/java/com/iluwatar/property/Size.java | 2 +- .../com/iluwatar/selector/ColorSelector.java | 5 + .../iluwatar/selector/MovementSelector.java | 5 + .../com/iluwatar/selector/SizeSelector.java | 5 + 17 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 specification/etc/specification.png create mode 100644 specification/etc/specification.ucls diff --git a/specification/etc/specification.png b/specification/etc/specification.png new file mode 100644 index 0000000000000000000000000000000000000000..a690413633cc6d7e2665d2431594becf8f4735c4 GIT binary patch literal 50066 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/specification/src/main/java/com/iluwatar/app/App.java b/specification/src/main/java/com/iluwatar/app/App.java index 85f9a386b..b078907b9 100644 --- a/specification/src/main/java/com/iluwatar/app/App.java +++ b/specification/src/main/java/com/iluwatar/app/App.java @@ -16,7 +16,21 @@ import com.iluwatar.property.Movement; import com.iluwatar.selector.ColorSelector; import com.iluwatar.selector.MovementSelector; +/** + * + * The central idea of Specification pattern is to separate the statement of how to match a candidate, from the + * candidate object that it is matched against. As well as its usefulness in selection, it is also valuable for + * validation and for building to order. + * + * In this example we have a pool of creatures with different properties. We then have defined separate selection + * rules (Specifications) that we apply to the collection and as output receive only the creatures that match + * the selection criteria. + * + * http://martinfowler.com/apsupp/spec.pdf + * + */ public class App { + public static void main( String[] args ) { // initialize creatures list List creatures = Arrays.asList(new Goblin(), new Octopus(), new Dragon(), new Shark(), new Troll(), new KillerBee()); diff --git a/specification/src/main/java/com/iluwatar/creature/AbstractCreature.java b/specification/src/main/java/com/iluwatar/creature/AbstractCreature.java index e07144836..c6294bd4a 100644 --- a/specification/src/main/java/com/iluwatar/creature/AbstractCreature.java +++ b/specification/src/main/java/com/iluwatar/creature/AbstractCreature.java @@ -4,6 +4,11 @@ import com.iluwatar.property.Color; import com.iluwatar.property.Movement; import com.iluwatar.property.Size; +/** + * + * Base class for concrete creatures. + * + */ public abstract class AbstractCreature implements Creature { private String name; diff --git a/specification/src/main/java/com/iluwatar/creature/Creature.java b/specification/src/main/java/com/iluwatar/creature/Creature.java index eb49b5a77..1844db804 100644 --- a/specification/src/main/java/com/iluwatar/creature/Creature.java +++ b/specification/src/main/java/com/iluwatar/creature/Creature.java @@ -4,6 +4,11 @@ import com.iluwatar.property.Color; import com.iluwatar.property.Movement; import com.iluwatar.property.Size; +/** + * + * Creature interface. + * + */ public interface Creature { String getName(); diff --git a/specification/src/main/java/com/iluwatar/creature/Dragon.java b/specification/src/main/java/com/iluwatar/creature/Dragon.java index d7a93f74c..a925c60b9 100644 --- a/specification/src/main/java/com/iluwatar/creature/Dragon.java +++ b/specification/src/main/java/com/iluwatar/creature/Dragon.java @@ -4,6 +4,11 @@ import com.iluwatar.property.Color; import com.iluwatar.property.Movement; import com.iluwatar.property.Size; +/** + * + * Dragon creature. + * + */ public class Dragon extends AbstractCreature { public Dragon() { diff --git a/specification/src/main/java/com/iluwatar/creature/Goblin.java b/specification/src/main/java/com/iluwatar/creature/Goblin.java index 4f584756d..19bdac7f1 100644 --- a/specification/src/main/java/com/iluwatar/creature/Goblin.java +++ b/specification/src/main/java/com/iluwatar/creature/Goblin.java @@ -4,6 +4,11 @@ import com.iluwatar.property.Color; import com.iluwatar.property.Movement; import com.iluwatar.property.Size; +/** + * + * Goblin creature. + * + */ public class Goblin extends AbstractCreature { public Goblin() { diff --git a/specification/src/main/java/com/iluwatar/creature/KillerBee.java b/specification/src/main/java/com/iluwatar/creature/KillerBee.java index bbb906bf1..e2ebf4d1f 100644 --- a/specification/src/main/java/com/iluwatar/creature/KillerBee.java +++ b/specification/src/main/java/com/iluwatar/creature/KillerBee.java @@ -4,6 +4,11 @@ import com.iluwatar.property.Color; import com.iluwatar.property.Movement; import com.iluwatar.property.Size; +/** + * + * KillerBee creature. + * + */ public class KillerBee extends AbstractCreature { public KillerBee() { diff --git a/specification/src/main/java/com/iluwatar/creature/Octopus.java b/specification/src/main/java/com/iluwatar/creature/Octopus.java index b3bab86b9..f40030475 100644 --- a/specification/src/main/java/com/iluwatar/creature/Octopus.java +++ b/specification/src/main/java/com/iluwatar/creature/Octopus.java @@ -4,6 +4,11 @@ import com.iluwatar.property.Color; import com.iluwatar.property.Movement; import com.iluwatar.property.Size; +/** + * + * Octopus creature. + * + */ public class Octopus extends AbstractCreature { public Octopus() { diff --git a/specification/src/main/java/com/iluwatar/creature/Shark.java b/specification/src/main/java/com/iluwatar/creature/Shark.java index 3ae40a342..a751cc605 100644 --- a/specification/src/main/java/com/iluwatar/creature/Shark.java +++ b/specification/src/main/java/com/iluwatar/creature/Shark.java @@ -4,6 +4,11 @@ import com.iluwatar.property.Color; import com.iluwatar.property.Movement; import com.iluwatar.property.Size; +/** + * + * Shark creature. + * + */ public class Shark extends AbstractCreature { public Shark() { diff --git a/specification/src/main/java/com/iluwatar/creature/Troll.java b/specification/src/main/java/com/iluwatar/creature/Troll.java index 82178042b..3773c6e93 100644 --- a/specification/src/main/java/com/iluwatar/creature/Troll.java +++ b/specification/src/main/java/com/iluwatar/creature/Troll.java @@ -4,6 +4,11 @@ import com.iluwatar.property.Color; import com.iluwatar.property.Movement; import com.iluwatar.property.Size; +/** + * + * Troll creature. + * + */ public class Troll extends AbstractCreature { public Troll() { diff --git a/specification/src/main/java/com/iluwatar/property/Color.java b/specification/src/main/java/com/iluwatar/property/Color.java index 52238b13b..4ee16063a 100644 --- a/specification/src/main/java/com/iluwatar/property/Color.java +++ b/specification/src/main/java/com/iluwatar/property/Color.java @@ -1,5 +1,10 @@ package com.iluwatar.property; +/** + * + * Color property. + * + */ public enum Color { DARK("dark"), LIGHT("light"), GREEN("green"), RED("red"); diff --git a/specification/src/main/java/com/iluwatar/property/Movement.java b/specification/src/main/java/com/iluwatar/property/Movement.java index a4b29deb8..9fcdc4d23 100644 --- a/specification/src/main/java/com/iluwatar/property/Movement.java +++ b/specification/src/main/java/com/iluwatar/property/Movement.java @@ -1,5 +1,10 @@ package com.iluwatar.property; +/** + * + * Movement property. + * + */ public enum Movement { WALKING("walking"), SWIMMING("swimming"), FLYING("flying"); diff --git a/specification/src/main/java/com/iluwatar/property/Size.java b/specification/src/main/java/com/iluwatar/property/Size.java index d97775ea4..2fbbdb2dc 100644 --- a/specification/src/main/java/com/iluwatar/property/Size.java +++ b/specification/src/main/java/com/iluwatar/property/Size.java @@ -2,7 +2,7 @@ package com.iluwatar.property; /** * - * Enumeration for creature size. + * Size property. * */ public enum Size { diff --git a/specification/src/main/java/com/iluwatar/selector/ColorSelector.java b/specification/src/main/java/com/iluwatar/selector/ColorSelector.java index 07e437b4c..532c79e89 100644 --- a/specification/src/main/java/com/iluwatar/selector/ColorSelector.java +++ b/specification/src/main/java/com/iluwatar/selector/ColorSelector.java @@ -5,6 +5,11 @@ import java.util.function.Predicate; import com.iluwatar.creature.Creature; import com.iluwatar.property.Color; +/** + * + * Color selector. + * + */ public class ColorSelector implements Predicate { private final Color c; diff --git a/specification/src/main/java/com/iluwatar/selector/MovementSelector.java b/specification/src/main/java/com/iluwatar/selector/MovementSelector.java index 5fe7ce40a..076e0ea5d 100644 --- a/specification/src/main/java/com/iluwatar/selector/MovementSelector.java +++ b/specification/src/main/java/com/iluwatar/selector/MovementSelector.java @@ -5,6 +5,11 @@ import java.util.function.Predicate; import com.iluwatar.creature.Creature; import com.iluwatar.property.Movement; +/** + * + * Movement selector. + * + */ public class MovementSelector implements Predicate { private final Movement m; diff --git a/specification/src/main/java/com/iluwatar/selector/SizeSelector.java b/specification/src/main/java/com/iluwatar/selector/SizeSelector.java index 1242920f7..58d705839 100644 --- a/specification/src/main/java/com/iluwatar/selector/SizeSelector.java +++ b/specification/src/main/java/com/iluwatar/selector/SizeSelector.java @@ -5,6 +5,11 @@ import java.util.function.Predicate; import com.iluwatar.creature.Creature; import com.iluwatar.property.Size; +/** + * + * Size selector. + * + */ public class SizeSelector implements Predicate { private final Size s;