diff --git a/Java Design Patterns/AbstractFactory/App.java b/Java Design Patterns/AbstractFactory/App.java new file mode 100755 index 00000000..91c8131b --- /dev/null +++ b/Java Design Patterns/AbstractFactory/App.java @@ -0,0 +1,35 @@ +public class App{ + + /** + * + * Here is used a implementation Abstract Factory + * + * */ + public static void main( String[] args ){ + + FactoryCar factory; + + //Using firt implementations + factory = new GMCFactory(); + printInformations(factory); + + //Using second implementation + factory = new ToyotaFactory(); + printInformations(factory); + } + + public static void printInformations(FactoryCar factory) { + + Minivan minivan = factory.createMinivan(); + System.out.println("------- Info MiniVan---------"); + minivan.printName(); + minivan.printFuel(); + System.out.println("-----------------------------"); + + Pickup pickup = factory.createPickup(); + System.out.println("------- Info Pickup---------"); + pickup.printName(); + pickup.printFuel(); + System.out.println("-----------------------------"); + } +} diff --git a/Java Design Patterns/AbstractFactory/FactoryCar.java b/Java Design Patterns/AbstractFactory/FactoryCar.java new file mode 100755 index 00000000..7f7d2a5e --- /dev/null +++ b/Java Design Patterns/AbstractFactory/FactoryCar.java @@ -0,0 +1,5 @@ +public interface FactoryCar { + + Minivan createMinivan(); + Pickup createPickup(); +} diff --git a/Java Design Patterns/AbstractFactory/GMCFactory.java b/Java Design Patterns/AbstractFactory/GMCFactory.java new file mode 100755 index 00000000..6ddc40f1 --- /dev/null +++ b/Java Design Patterns/AbstractFactory/GMCFactory.java @@ -0,0 +1,13 @@ +public class GMCFactory implements FactoryCar { + + public Minivan createMinivan() { + + return new Savana(); + } + + public Pickup createPickup() { + + return new Sierra(); + } + +} diff --git a/Java Design Patterns/AbstractFactory/Minivan.java b/Java Design Patterns/AbstractFactory/Minivan.java new file mode 100755 index 00000000..fbad986f --- /dev/null +++ b/Java Design Patterns/AbstractFactory/Minivan.java @@ -0,0 +1,5 @@ +public interface Minivan { + + public void printName(); + public void printFuel(); +} diff --git a/Java Design Patterns/AbstractFactory/Pickup.java b/Java Design Patterns/AbstractFactory/Pickup.java new file mode 100755 index 00000000..db0c365d --- /dev/null +++ b/Java Design Patterns/AbstractFactory/Pickup.java @@ -0,0 +1,5 @@ +public interface Pickup { + + public void printName(); + public void printFuel(); +} diff --git a/Java Design Patterns/AbstractFactory/Savana.java b/Java Design Patterns/AbstractFactory/Savana.java new file mode 100755 index 00000000..4d3c3e26 --- /dev/null +++ b/Java Design Patterns/AbstractFactory/Savana.java @@ -0,0 +1,13 @@ +public class Savana implements Minivan { + + public void printName() { + System.out.println("Savana 1500 Cargo"); + + } + + public void printFuel() { + System.out.println("Flex"); + + } + +} diff --git a/Java Design Patterns/AbstractFactory/Sienna.java b/Java Design Patterns/AbstractFactory/Sienna.java new file mode 100755 index 00000000..f3ad8bdf --- /dev/null +++ b/Java Design Patterns/AbstractFactory/Sienna.java @@ -0,0 +1,13 @@ +public class Sienna implements Minivan { + + public void printName() { + + System.out.println("Sienna"); + } + + public void printFuel() { + + System.out.println("Gasoline"); + } + +} diff --git a/Java Design Patterns/AbstractFactory/Sierra.java b/Java Design Patterns/AbstractFactory/Sierra.java new file mode 100755 index 00000000..8c807b34 --- /dev/null +++ b/Java Design Patterns/AbstractFactory/Sierra.java @@ -0,0 +1,13 @@ +public class Sierra implements Pickup { + + public void printName() { + + System.out.println("GMC Sierra 1500 SLT Ext. Cab 4WD"); + } + + public void printFuel() { + + System.out.println("Flex"); + } + +} diff --git a/Java Design Patterns/AbstractFactory/Tacoma.java b/Java Design Patterns/AbstractFactory/Tacoma.java new file mode 100755 index 00000000..51146da7 --- /dev/null +++ b/Java Design Patterns/AbstractFactory/Tacoma.java @@ -0,0 +1,12 @@ +public class Tacoma implements Pickup { + + public void printName() { + + System.out.println("TACOMA"); + } + + public void printFuel() { + + System.out.println("Diesel"); + } +} diff --git a/Java Design Patterns/AbstractFactory/ToyotaFactory.java b/Java Design Patterns/AbstractFactory/ToyotaFactory.java new file mode 100755 index 00000000..8bd76390 --- /dev/null +++ b/Java Design Patterns/AbstractFactory/ToyotaFactory.java @@ -0,0 +1,13 @@ +public class ToyotaFactory implements FactoryCar { + + public Minivan createMinivan() { + + return new Sienna(); + } + + public Pickup createPickup() { + + return new Tacoma(); + } + +} diff --git a/Java Design Patterns/AbstractFactory/readme.md b/Java Design Patterns/AbstractFactory/readme.md new file mode 100755 index 00000000..5d73989b --- /dev/null +++ b/Java Design Patterns/AbstractFactory/readme.md @@ -0,0 +1,19 @@ +# Abstract Factory + +Has primary responsibility for reducing the use of `new`, this pattern provide a interface to create a family objects. + +How in example we have a family of Car( Minivan and Pickups ), but can have several implementations how: + +- ToyotaFactory +- GMCFactory + +With this pattern we can create any CarFactory, just implemented it. + +See follow classes: + +- `FactoryCar` +- `MiniVan` +- `Pickup` +- Implementations for `Minivan` and `Pickup` +- `GMCFactory` +- `ToyotaFactory` \ No newline at end of file