From 46b23f322fff5fc3ece1f92f126ac7dd4573aa33 Mon Sep 17 00:00:00 2001 From: Samil Ayoub Date: Wed, 2 Sep 2020 13:46:53 +0100 Subject: [PATCH] Add Simple Factory Pattern implementation Java source code demonstrate simple factory design pattern --- pom.xml | 1 + .../java/com/iluwatar/simplefactory/App.java | 16 ++++++++++ .../java/com/iluwatar/simplefactory/Car.java | 10 +++++++ .../simplefactory/CarSimpleFactory.java | 29 +++++++++++++++++++ .../com/iluwatar/simplefactory/Ferrari.java | 14 +++++++++ .../java/com/iluwatar/simplefactory/Ford.java | 14 +++++++++ 6 files changed, 84 insertions(+) create mode 100644 simple-factory/src/main/java/com/iluwatar/simplefactory/App.java create mode 100644 simple-factory/src/main/java/com/iluwatar/simplefactory/Car.java create mode 100644 simple-factory/src/main/java/com/iluwatar/simplefactory/CarSimpleFactory.java create mode 100644 simple-factory/src/main/java/com/iluwatar/simplefactory/Ferrari.java create mode 100644 simple-factory/src/main/java/com/iluwatar/simplefactory/Ford.java diff --git a/pom.xml b/pom.xml index 6d779700f..cc59a846a 100644 --- a/pom.xml +++ b/pom.xml @@ -195,6 +195,7 @@ arrange-act-assert transaction-script filterer + simple-factory diff --git a/simple-factory/src/main/java/com/iluwatar/simplefactory/App.java b/simple-factory/src/main/java/com/iluwatar/simplefactory/App.java new file mode 100644 index 000000000..898efe6d3 --- /dev/null +++ b/simple-factory/src/main/java/com/iluwatar/simplefactory/App.java @@ -0,0 +1,16 @@ +package com.iluwatar.simplefactory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class App { + + private static final Logger LOGGER = LoggerFactory.getLogger(App.class); + + public static void main(String[] args) { + Car car1 = CarSimpleFactory.getCar(CarSimpleFactory.carTypes.FORD); + Car car2 = CarSimpleFactory.getCar(CarSimpleFactory.carTypes.FERRARI); + LOGGER.info(car1.getDescription()); + LOGGER.info(car2.getDescription()); + } +} diff --git a/simple-factory/src/main/java/com/iluwatar/simplefactory/Car.java b/simple-factory/src/main/java/com/iluwatar/simplefactory/Car.java new file mode 100644 index 000000000..82ff4ebe0 --- /dev/null +++ b/simple-factory/src/main/java/com/iluwatar/simplefactory/Car.java @@ -0,0 +1,10 @@ +package com.iluwatar.simplefactory; + +/** + * Car interface + */ +public interface Car { + + public String getDescription(); + +} diff --git a/simple-factory/src/main/java/com/iluwatar/simplefactory/CarSimpleFactory.java b/simple-factory/src/main/java/com/iluwatar/simplefactory/CarSimpleFactory.java new file mode 100644 index 000000000..33dbe7b88 --- /dev/null +++ b/simple-factory/src/main/java/com/iluwatar/simplefactory/CarSimpleFactory.java @@ -0,0 +1,29 @@ +package com.iluwatar.simplefactory; + + +/** + * Factory of cars + */ +public class CarSimpleFactory { + + /* + * Enumeration for different types of cars + */ + static enum carTypes { + FORD, FERRARI + }; + + /* + * Factory method takes as parameter a car type and initiate the appropriate class + */ + public static Car getCar(carTypes type) { + switch (type) { + case FORD: + return new Ford(); + case FERRARI: + return new Ferrari(); + default: + throw new IllegalArgumentException("Model not supported."); + } + } +} diff --git a/simple-factory/src/main/java/com/iluwatar/simplefactory/Ferrari.java b/simple-factory/src/main/java/com/iluwatar/simplefactory/Ferrari.java new file mode 100644 index 000000000..f9f1d8492 --- /dev/null +++ b/simple-factory/src/main/java/com/iluwatar/simplefactory/Ferrari.java @@ -0,0 +1,14 @@ +package com.iluwatar.simplefactory; + +/** + * Ferrari implementation + */ +public class Ferrari implements Car { + + static final String DESCRIPTION = "This is Ferrari."; + + @Override + public String getDescription() { + return DESCRIPTION; + } +} diff --git a/simple-factory/src/main/java/com/iluwatar/simplefactory/Ford.java b/simple-factory/src/main/java/com/iluwatar/simplefactory/Ford.java new file mode 100644 index 000000000..0adf4b66b --- /dev/null +++ b/simple-factory/src/main/java/com/iluwatar/simplefactory/Ford.java @@ -0,0 +1,14 @@ +package com.iluwatar.simplefactory; + +/** + * Ford implementation + */ +public class Ford implements Car { + + static final String DESCRIPTION = "This is Ford."; + + @Override + public String getDescription() { + return DESCRIPTION; + } +}