From 67ae16bb24ec7fb1eedb8776f2cd0d20b7ec3435 Mon Sep 17 00:00:00 2001 From: Subhatav Dhali Date: Sun, 3 Nov 2024 12:07:36 +0530 Subject: [PATCH 1/2] Add minor improvements to the whole IDEA project --- .gitignore | 1 - .idea/checkstyleidea-libs/readme.txt | 6 ------ .idea/vcs.xml | 2 +- design-patterns.iml | 2 +- src/practice/behavioral/chain/Worker.java | 2 ++ src/practice/behavioral/command/SwitchButton.java | 2 +- src/practice/behavioral/observer/Subject.java | 2 +- src/practice/behavioral/observer/Weather.java | 8 ++++---- src/practice/behavioral/state/HasCoinState.java | 4 ++-- src/practice/behavioral/state/NoCoinState.java | 2 +- src/practice/behavioral/state/VendorMachine.java | 4 ++-- src/practice/behavioral/strategy/PaymentGateway.java | 4 ++-- src/practice/behavioral/strategy/StrategyDemo.java | 2 +- src/practice/behavioral/visitor/Captain.java | 2 +- src/practice/behavioral/visitor/Recruit.java | 2 +- src/practice/behavioral/visitor/Sergeant.java | 2 +- src/practice/behavioral/visitor/VisitorDemo.java | 2 +- src/practice/creational/builder/BuilderDemo.java | 11 ++++------- src/practice/creational/builder/CustomPizza.java | 4 ++-- src/practice/creational/pool/PoolDemo.java | 4 ++-- .../structural/composite/HeadDepartment.java | 12 ++++++------ 21 files changed, 36 insertions(+), 44 deletions(-) delete mode 100644 .idea/checkstyleidea-libs/readme.txt diff --git a/.gitignore b/.gitignore index 6651189..24a3ddd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ *.log # Compiled Files # -bin/ out/ \ No newline at end of file diff --git a/.idea/checkstyleidea-libs/readme.txt b/.idea/checkstyleidea-libs/readme.txt deleted file mode 100644 index c552c6f..0000000 --- a/.idea/checkstyleidea-libs/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -This folder contains libraries copied from the "learning-design-patterns-with-java" project. -It is managed by the CheckStyle-IDEA IDE plugin. -Do not modify this folder while the IDE is running. -When the IDE is stopped, you may delete this folder at any time. It will be recreated as needed. -In order to prevent the CheckStyle-IDEA IDE plugin from creating this folder, -uncheck the "Copy libraries from project directory" option in the CheckStyle-IDEA settings dialog. diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 09a1793..fa0cc1a 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/design-patterns.iml b/design-patterns.iml index 4019e38..dc71840 100644 --- a/design-patterns.iml +++ b/design-patterns.iml @@ -22,7 +22,7 @@ - ō + \ No newline at end of file diff --git a/src/practice/behavioral/chain/Worker.java b/src/practice/behavioral/chain/Worker.java index 2e1f1db..05b12bd 100644 --- a/src/practice/behavioral/chain/Worker.java +++ b/src/practice/behavioral/chain/Worker.java @@ -1,11 +1,13 @@ package practice.behavioral.chain; +import lombok.EqualsAndHashCode; import lombok.NonNull; import lombok.Setter; import lombok.extern.java.Log; @Log @Setter +@EqualsAndHashCode public abstract sealed class Worker permits General, Jailer, King, Officer { protected Worker next; // Worker who is NEXT in CHAIN of Responsibility diff --git a/src/practice/behavioral/command/SwitchButton.java b/src/practice/behavioral/command/SwitchButton.java index e154843..2bd72e7 100644 --- a/src/practice/behavioral/command/SwitchButton.java +++ b/src/practice/behavioral/command/SwitchButton.java @@ -21,7 +21,7 @@ public void toggleState() { } public void printState() { - var isOn = state ? "ON" : "OFF"; // Determine current state of Switch + var isOn = state ? "ON" : "OFF"; // Determine CURRENT state of Switch log.info("State of <" + location + "> Switch => [" + isOn + "]"); } } diff --git a/src/practice/behavioral/observer/Subject.java b/src/practice/behavioral/observer/Subject.java index 62c74a7..d20d96b 100644 --- a/src/practice/behavioral/observer/Subject.java +++ b/src/practice/behavioral/observer/Subject.java @@ -8,5 +8,5 @@ public sealed interface Subject permits Weather { void detach(@NonNull final Observer watcher); - void notifyObservers(); + void notifyObservers(); // UPDATE Observers } diff --git a/src/practice/behavioral/observer/Weather.java b/src/practice/behavioral/observer/Weather.java index a44f955..61c0e53 100644 --- a/src/practice/behavioral/observer/Weather.java +++ b/src/practice/behavioral/observer/Weather.java @@ -17,13 +17,13 @@ public final class Weather implements Subject { @Override public void attach(@NonNull final Observer watcher) { - log.info("Attaching Observer => [" + watcher + "]"); + log.info("ATTACHING Observer => [" + watcher + "]"); observers.add(watcher); // Add OBSERVER to current LIST } @Override public void detach(@NonNull final Observer watcher) { - log.info("Detaching Observer => [" + watcher + "]"); + log.info("DETACHING Observer => [" + watcher + "]"); observers.remove(watcher); // Remove OBSERVER from LIST } @@ -34,9 +34,9 @@ public void notifyObservers() { } public void advanceTime() { - log.info("Current Weather Type => [" + currentWeatherType + "]"); + log.info("CURRENT Weather TYPE => [" + currentWeatherType + "]"); currentWeatherType = getFreshWeatherType(WeatherType.values()); - log.info("Changed Weather Type => [" + currentWeatherType + "]"); + log.info("CHANGED Weather TYPE => [" + currentWeatherType + "]"); notifyObservers(); // Update ALL Watchers of CHANGE in Weather } diff --git a/src/practice/behavioral/state/HasCoinState.java b/src/practice/behavioral/state/HasCoinState.java index 62db595..62eb966 100644 --- a/src/practice/behavioral/state/HasCoinState.java +++ b/src/practice/behavioral/state/HasCoinState.java @@ -17,13 +17,13 @@ public void insertCoin(@NonNull final VendorMachine machine) { @Override public void ejectCoin(@NonNull final VendorMachine machine) { - machine.setState(new NoCoinState()); // ALTER State afterwards + machine.setState(new NoCoinState()); // ALTER state afterwards log.info("PASSED in EJECTING Coin => [" + machine + "]"); } @Override public void dispenseFood(@NonNull final VendorMachine machine) { - machine.setState(new NoCoinState()); // ALTER State AFTER Action + machine.setState(new NoCoinState()); // ALTER state after action log.info("PASSED in DISPENSING Food => [" + machine + "]"); } } diff --git a/src/practice/behavioral/state/NoCoinState.java b/src/practice/behavioral/state/NoCoinState.java index 4884c19..ac40a7d 100644 --- a/src/practice/behavioral/state/NoCoinState.java +++ b/src/practice/behavioral/state/NoCoinState.java @@ -12,7 +12,7 @@ public final class NoCoinState implements VendorState { @Override public void insertCoin(@NonNull final VendorMachine machine) { - machine.setState(new HasCoinState()); // ALTER State afterwards + machine.setState(new HasCoinState()); // ALTER state afterwards log.info("PASSED in INSERTING Coin => [" + machine + "]"); } diff --git a/src/practice/behavioral/state/VendorMachine.java b/src/practice/behavioral/state/VendorMachine.java index 05b2979..7eb30f6 100644 --- a/src/practice/behavioral/state/VendorMachine.java +++ b/src/practice/behavioral/state/VendorMachine.java @@ -15,12 +15,12 @@ public final class VendorMachine { public void insertMoney() { log.info("ATTEMPT to INSERT Money => [" + this + "]"); - state.insertCoin(this); // Try to INSERT Money + state.insertCoin(this); // Attempt to INSERT Money } public void ejectMoney() { log.info("ATTEMPT to EJECT Money => [" + this + "]"); - state.ejectCoin(this); // Try to EJECT Money + state.ejectCoin(this); // Attempt to EJECT Money } public void dispenseFood() { diff --git a/src/practice/behavioral/strategy/PaymentGateway.java b/src/practice/behavioral/strategy/PaymentGateway.java index 15bf84e..bc5902a 100644 --- a/src/practice/behavioral/strategy/PaymentGateway.java +++ b/src/practice/behavioral/strategy/PaymentGateway.java @@ -16,7 +16,7 @@ public final class PaymentGateway { private PaymentStrategy strategy; public void checkout(@NonNull final int amount) { - log.info("SELECTED Strategy => " + strategy); - strategy.pay(amount); // EXECUTE specific Strategy + log.info("SELECTED Strategy => [" + strategy + "]"); + strategy.pay(amount); // EXECUTE this SELECTED Strategy } } diff --git a/src/practice/behavioral/strategy/StrategyDemo.java b/src/practice/behavioral/strategy/StrategyDemo.java index 4c1b891..d7e2048 100644 --- a/src/practice/behavioral/strategy/StrategyDemo.java +++ b/src/practice/behavioral/strategy/StrategyDemo.java @@ -7,7 +7,7 @@ public final class StrategyDemo { public static void main(final String... arguments) { - final var gateway = new PaymentGateway(); + final var gateway = new PaymentGateway(); // SAME Gateway gateway.setStrategy(new CashPayment("wallet")); gateway.checkout(1_000); // Make PAYMENT with CASH diff --git a/src/practice/behavioral/visitor/Captain.java b/src/practice/behavioral/visitor/Captain.java index 1e4bf41..602d871 100644 --- a/src/practice/behavioral/visitor/Captain.java +++ b/src/practice/behavioral/visitor/Captain.java @@ -6,7 +6,7 @@ @ToString public final class Captain extends ArmyUnit { - Captain(@NonNull final ArmyUnit... children) { + public Captain(@NonNull final ArmyUnit... children) { super(children); } diff --git a/src/practice/behavioral/visitor/Recruit.java b/src/practice/behavioral/visitor/Recruit.java index caa63c7..a78c5bf 100644 --- a/src/practice/behavioral/visitor/Recruit.java +++ b/src/practice/behavioral/visitor/Recruit.java @@ -6,7 +6,7 @@ @ToString public final class Recruit extends ArmyUnit { - Recruit(@NonNull final ArmyUnit... children) { + public Recruit(@NonNull final ArmyUnit... children) { super(children); } diff --git a/src/practice/behavioral/visitor/Sergeant.java b/src/practice/behavioral/visitor/Sergeant.java index 1cf1182..7648f1f 100644 --- a/src/practice/behavioral/visitor/Sergeant.java +++ b/src/practice/behavioral/visitor/Sergeant.java @@ -6,7 +6,7 @@ @ToString public final class Sergeant extends ArmyUnit { - Sergeant(@NonNull final ArmyUnit... children) { + public Sergeant(@NonNull final ArmyUnit... children) { super(children); } diff --git a/src/practice/behavioral/visitor/VisitorDemo.java b/src/practice/behavioral/visitor/VisitorDemo.java index c79343d..23099af 100644 --- a/src/practice/behavioral/visitor/VisitorDemo.java +++ b/src/practice/behavioral/visitor/VisitorDemo.java @@ -10,7 +10,7 @@ public static void main(final String[] arguments) { final var soldier = new Captain( new Sergeant(new Recruit(), new Recruit()), new Sergeant(new Recruit(), new Recruit()) - ); // Create CAMP Hierarchy of Soldiers + ); // Create Army CAMP hierarchy of Soldiers soldier.accept(new RecruitFriend()); soldier.accept(new SergeantFriend()); diff --git a/src/practice/creational/builder/BuilderDemo.java b/src/practice/creational/builder/BuilderDemo.java index 6782ee1..7611f1a 100644 --- a/src/practice/creational/builder/BuilderDemo.java +++ b/src/practice/creational/builder/BuilderDemo.java @@ -1,9 +1,6 @@ package practice.creational.builder; import practice.creational.builder.CustomPizza.PizzaChef; -import practice.creational.builder.PizzaElement.DoughType; -import practice.creational.builder.PizzaElement.SauceType; -import practice.creational.builder.PizzaElement.ToppingType; /** * Example of Builder Design Pattern @@ -12,10 +9,10 @@ public final class BuilderDemo { public static void main(final String... arguments) { - new PizzaChef(DoughType.BAKED).setSauceType(SauceType.HOT) - .setTopping(ToppingType.CAPSICUM_MUSHROOM).cookPizza().eatPizza(); + new PizzaChef(PizzaElement.DoughType.BAKED).setSauceType(PizzaElement.SauceType.HOT) + .setTopping(PizzaElement.ToppingType.CAPSICUM_MUSHROOM).cookPizza().eatPizza(); - new PizzaChef(DoughType.CROSS).setSauceType(SauceType.MILD) - .setTopping(ToppingType.CHEESE_CORN_TOMATO).cookPizza().eatPizza(); + new PizzaChef(PizzaElement.DoughType.CROSS).setSauceType(PizzaElement.SauceType.MILD) + .setTopping(PizzaElement.ToppingType.CHEESE_CORN_TOMATO).cookPizza().eatPizza(); } } diff --git a/src/practice/creational/builder/CustomPizza.java b/src/practice/creational/builder/CustomPizza.java index 8524a53..2d105c1 100644 --- a/src/practice/creational/builder/CustomPizza.java +++ b/src/practice/creational/builder/CustomPizza.java @@ -23,7 +23,7 @@ public final class CustomPizza { private final PizzaElement.ToppingType topping; public void eatPizza() { - log.info("EATING Pizza => " + this); + log.info("EATING the Pizza => [" + this + "]"); } @Setter @@ -40,7 +40,7 @@ protected static final class PizzaChef { private PizzaElement.ToppingType topping; public CustomPizza cookPizza() { - log.info("COOKING Pizza => " + this); // In OVEN + log.info("COOKING the Pizza => [" + this + "]"); return new CustomPizza(doughType, sauceType, topping); } } diff --git a/src/practice/creational/pool/PoolDemo.java b/src/practice/creational/pool/PoolDemo.java index a0e6f9f..bfae755 100644 --- a/src/practice/creational/pool/PoolDemo.java +++ b/src/practice/creational/pool/PoolDemo.java @@ -31,7 +31,7 @@ public static void main(final String[] arguments) { objectPool.status(); // CURRENT status - objectPool.remit(personObj3); // REMIT - objectPool.status(); // CURRENT status + objectPool.remit(personObj3); // BACK + objectPool.status(); // FINALE status } } diff --git a/src/practice/structural/composite/HeadDepartment.java b/src/practice/structural/composite/HeadDepartment.java index e2633c4..ae0563e 100644 --- a/src/practice/structural/composite/HeadDepartment.java +++ b/src/practice/structural/composite/HeadDepartment.java @@ -20,16 +20,16 @@ public final class HeadDepartment implements Department { @NonNull private final String name; - public void addDepartment(Department department) { - departments.add(department); + public void addDepartment(@NonNull final Department department) { + departments.add(department); // ADD any SINGLE element in list } - public void addDepartments(Department... departments) { - this.departments.addAll(List.of(departments)); + public void addDepartments(@NonNull final Department... departments) { + this.departments.addAll(List.of(departments)); // ADD multiple items } - public void removeDepartment(Department department) { - departments.remove(department); + public void removeDepartment(@NonNull final Department department) { + departments.remove(department); // REMOVE any particular element } @Override From ef1b7f296ffc8d0160c3d634c20ee856f4774daf Mon Sep 17 00:00:00 2001 From: Subhatav Dhali Date: Sun, 3 Nov 2024 12:10:43 +0530 Subject: [PATCH 2/2] Document the Course Assignments and implementations --- README.md | 4 ++- src/course/README.md | 3 +++ src/practice/README.md | 41 +++++++++++++++++++++++++++++++ src/practice/behavioral/README.md | 5 ++++ src/practice/creational/README.md | 5 ++++ src/practice/structural/README.md | 5 ++++ 6 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 src/course/README.md create mode 100644 src/practice/README.md create mode 100644 src/practice/behavioral/README.md create mode 100644 src/practice/creational/README.md create mode 100644 src/practice/structural/README.md diff --git a/README.md b/README.md index 91c6102..9f9c85c 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# design-patterns +* ### Information Credits: [`refactoring.guru`](https://refactoring.guru/design-patterns) +* ### Documentation Credits: [`java-design-patterns`](https://java-design-patterns.com/patterns/) +* ### Video Credits: [`@ConceptAndCoding`](https://www.youtube.com/@ConceptandCoding) diff --git a/src/course/README.md b/src/course/README.md new file mode 100644 index 0000000..03894b8 --- /dev/null +++ b/src/course/README.md @@ -0,0 +1,3 @@ +# Learning Design Patterns with Java + +### Coursera Course: https://www.coursera.org/learn/design-patterns diff --git a/src/practice/README.md b/src/practice/README.md new file mode 100644 index 0000000..0f5dda3 --- /dev/null +++ b/src/practice/README.md @@ -0,0 +1,41 @@ +# Implementations of Design Patterns + +* ### Examples of [Creational](./creational) Design Patterns with Java: + +| Design Pattern | Information | Documentation | Video | +|:-----------------------------------------:|:-------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------:| +| [Factory Method](./creational/factory) | [`refactoring.guru`](https://refactoring.guru/design-patterns/factory-method) | [`java-design-patterns`](https://java-design-patterns.com/patterns/factory-method/) | | +| [Abstract Factory](./creational/notional) | [`refactoring.guru`](https://refactoring.guru/design-patterns/abstract-factory) | [`java-design-patterns`](https://java-design-patterns.com/patterns/abstract-factory/) | | +| [Builder](./creational/builder) | [`refactoring.guru`](https://refactoring.guru/design-patterns/builder) | [`java-design-patterns`](https://java-design-patterns.com/patterns/builder/) | [`@ConceptAndCoding`](https://youtu.be/qOLRxN5eVC0?si=E67H3Rx33vvzY4d_) | +| [Object Pool](./creational/pool) | N/A | [`java-design-patterns`](https://java-design-patterns.com/patterns/object-pool/) | [`@ConceptAndCoding`](https://youtu.be/obmc24IHqew?si=q7M84QnN_sbFrku0) | +| [Prototype](./creational/prototype) | [`refactoring.guru`](https://refactoring.guru/design-patterns/prototype) | [`java-design-patterns`](https://java-design-patterns.com/patterns/prototype/) | | +| [Singleton](./creational/singleton) | [`refactoring.guru`](https://refactoring.guru/design-patterns/singleton) | [`java-design-patterns`](https://java-design-patterns.com/patterns/singleton/) | | + +* ### Examples of [Structural](./structural) Design Patterns with Java: + +| Design Pattern | Information | Documentation | Video | +|:-----------------------------------:|:------------------------------------------------------------------------:|:------------------------------------------------------------------------------:|:-----------------------------------------------------------------------:| +| [Adapter](./structural/adapter) | [`refactoring.guru`](https://refactoring.guru/design-patterns/adapter) | [`java-design-patterns`](https://java-design-patterns.com/patterns/adapter/) | [`@ConceptAndCoding`](https://youtu.be/8wrg7IsILhQ?si=PF2kgCqwYN35dgao) | +| [Bridge](./structural/bridge) | [`refactoring.guru`](https://refactoring.guru/design-patterns/bridge) | [`java-design-patterns`](https://java-design-patterns.com/patterns/bridge/) | [`@ConceptAndCoding`](https://youtu.be/SOw1_W0taBg?si=4TxZSukUZCUYiNWj) | +| [Composite](./structural/composite) | [`refactoring.guru`](https://refactoring.guru/design-patterns/composite) | [`java-design-patterns`](https://java-design-patterns.com/patterns/composite/) | | +| [Decorator](./structural/decorator) | [`refactoring.guru`](https://refactoring.guru/design-patterns/decorator) | [`java-design-patterns`](https://java-design-patterns.com/patterns/decorator/) | [`@ConceptAndCoding`](https://youtu.be/w6a9MXUwcfY?si=KW_bfuG6F35_blZZ) | +| [Facade](./structural/facade) | [`refactoring.guru`](https://refactoring.guru/design-patterns/facade) | [`java-design-patterns`](https://java-design-patterns.com/patterns/facade/) | [`@ConceptAndCoding`](https://youtu.be/GYaBXK54eLo?si=aCmexb4t3izwlU9d) | +| [Flyweight](./structural/flyweight) | [`refactoring.guru`](https://refactoring.guru/design-patterns/flyweight) | [`java-design-patterns`](https://java-design-patterns.com/patterns/flyweight/) | | +| [Proxy](./structural/proxy) | [`refactoring.guru`](https://refactoring.guru/design-patterns/proxy) | [`java-design-patterns`](https://java-design-patterns.com/patterns/proxy/) | [`@ConceptAndCoding`](https://youtu.be/9MxHKlVc6ZM?si=tJME00X4UJ4XJJtc) | + +* ### Examples of [Behavioral](./behavioral) Design Patterns with Java: + +| Design Pattern | Information | Documentation | Video | +|:---------------------------------------------:|:--------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------:| +| [Chain of Responsibility](./behavioral/chain) | [`refactoring.guru`](https://refactoring.guru/design-patterns/chain-of-responsibility) | [`java-design-patterns`](https://java-design-patterns.com/patterns/chain-of-responsibility/) | [`@ConceptAndCoding`](https://youtu.be/gvIn5QBdGDk?si=30kOIX2x7Gx3MlqR) | +| [Command](./behavioral/command) | [`refactoring.guru`](https://refactoring.guru/design-patterns/command) | [`java-design-patterns`](https://java-design-patterns.com/patterns/command/) | [`@ConceptAndCoding`](https://youtu.be/E1lce5CWhE0?si=X4HIR777Y9ddFjPS) | +| Interpreter | N/A | [`java-design-patterns`](https://java-design-patterns.com/patterns/interpreter/) | [`@ConceptAndCoding`](https://youtu.be/fFlPm0pzQYI?si=4DuKSD2Qbt1NQFUE) | +| [Iterator](./behavioral/iterator) | [`refactoring.guru`](https://refactoring.guru/design-patterns/iterator) | [`java-design-patterns`](https://java-design-patterns.com/patterns/iterator/) | [`@ConceptAndCoding`](https://youtu.be/X7shKHOaYtU?si=F7dk7AZjEOaHpLhv) | +| [Mediator](./behavioral/mediator) | [`refactoring.guru`](https://refactoring.guru/design-patterns/mediator) | [`java-design-patterns`](https://java-design-patterns.com/patterns/mediator/) | | +| [Memento](./behavioral/memento) | [`refactoring.guru`](https://refactoring.guru/design-patterns/memento) | [`java-design-patterns`](https://java-design-patterns.com/patterns/memento/) | [`@ConceptAndCoding`](https://youtu.be/nTo7e2lpGZ4?si=9wsYjiNs3iG-g0ti) | +| Null Object | N/A | [`java-design-patterns`](https://java-design-patterns.com/patterns/null-object/) | [`@ConceptAndCoding`](https://youtu.be/iDPhxhamuTo?si=oBsfb-mqRKq764c8) | +| [Observer](./behavioral/observer) | [`refactoring.guru`](https://refactoring.guru/design-patterns/observer) | [`java-design-patterns`](https://java-design-patterns.com/patterns/observer/) | [`@ConceptAndCoding`](https://youtu.be/Ep9_Zcgst3U?si=Vq--dx8gSRqY7mrH) | +| [State](./behavioral/state) | [`refactoring.guru`](https://refactoring.guru/design-patterns/state) | [`java-design-patterns`](https://java-design-patterns.com/patterns/state/) | | +| [Strategy](./behavioral/strategy) | [`refactoring.guru`](https://refactoring.guru/design-patterns/strategy) | [`java-design-patterns`](https://java-design-patterns.com/patterns/strategy/) | [`@ConceptAndCoding`](https://youtu.be/u8DttUrXtEw?si=LskxabetaZKy9gKA) | +| [Template Method](./behavioral/template) | [`refactoring.guru`](https://refactoring.guru/design-patterns/template-method) | [`java-design-patterns`](https://java-design-patterns.com/patterns/template-method/) | [`@ConceptAndCoding`](https://youtu.be/kwy-G1DEm0M?si=yNZlZCuseVQaUCmT) | +| [Visitor](./behavioral/visitor) | [`refactoring.guru`](https://refactoring.guru/design-patterns/visitor) | [`java-design-patterns`](https://java-design-patterns.com/patterns/visitor/) | [`@ConceptAndCoding`](https://youtu.be/pDsz-AuFO0g?si=11YASEg0NspKyykR) | diff --git a/src/practice/behavioral/README.md b/src/practice/behavioral/README.md new file mode 100644 index 0000000..7687431 --- /dev/null +++ b/src/practice/behavioral/README.md @@ -0,0 +1,5 @@ +# Examples of `Behavioral` Design Patterns with Java + +### Pluralsight Course: https://www.pluralsight.com/courses/design-patterns-java-behavioral + +### YouTube Recap Video: https://youtu.be/DBDnUkTobaE?si=-bXWvLOWm9G9moRa diff --git a/src/practice/creational/README.md b/src/practice/creational/README.md new file mode 100644 index 0000000..ad51136 --- /dev/null +++ b/src/practice/creational/README.md @@ -0,0 +1,5 @@ +# Examples of `Creational` Design Patterns with Java + +### Pluralsight Course: https://www.pluralsight.com/courses/java-se-17-creational-design-patterns + +### YouTube Recap Video: https://youtu.be/OuNOyFg942M?si=AykaiZsmEG7qHfhx diff --git a/src/practice/structural/README.md b/src/practice/structural/README.md new file mode 100644 index 0000000..29ca652 --- /dev/null +++ b/src/practice/structural/README.md @@ -0,0 +1,5 @@ +# Examples of `Structural` Design Patterns with Java + +### Pluralsight Course: https://www.pluralsight.com/courses/design-patterns-java-structural + +### YouTube Recap Video: https://youtu.be/WxGtmIBZszk?si=GUdKyp6vGiS4g94Q