diff --git a/.idea/Java-Design-Patterns.iml b/.idea/Java-Design-Patterns.iml
index b107a2d..f392c3c 100644
--- a/.idea/Java-Design-Patterns.iml
+++ b/.idea/Java-Design-Patterns.iml
@@ -7,5 +7,6 @@
+
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 0000000..0dd4b35
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/KotlinJavaRuntime.xml b/.idea/libraries/KotlinJavaRuntime.xml
new file mode 100644
index 0000000..30d5a17
--- /dev/null
+++ b/.idea/libraries/KotlinJavaRuntime.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index d2eb5ce..ec83019 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 5946adc..db83069 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,21 +1,51 @@
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -28,9 +58,38 @@
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
- "last_opened_file_path": "D:/Code Java/Java-Design-Patterns"
+ "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "last_opened_file_path": "/Volumes/Data/Code-base/Java-Design-Patterns"
}
}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Creational_Pattern/Factory_Method/Java_Factory_Method/Client.java b/Creational_Pattern/Factory_Method/Java_Factory_Method/Client.java
new file mode 100644
index 0000000..ddf5ef9
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Java_Factory_Method/Client.java
@@ -0,0 +1,8 @@
+package Creational_Pattern.Factory_Method.Java_Factory_Method;
+
+public class Client {
+ public static void main(String[] args) {
+ Transport transport = TransportFactory.getTransport(TransportType.SHIP);
+ transport.deliver(); //SeaTransport
+ }
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Java_Factory_Method/Ship.java b/Creational_Pattern/Factory_Method/Java_Factory_Method/Ship.java
new file mode 100644
index 0000000..533cb3e
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Java_Factory_Method/Ship.java
@@ -0,0 +1,8 @@
+package Creational_Pattern.Factory_Method.Java_Factory_Method;
+
+class Ship implements Transport {
+ @Override
+ public void deliver() {
+ System.out.println("SeaTransport");
+ }
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Java_Factory_Method/Transport.java b/Creational_Pattern/Factory_Method/Java_Factory_Method/Transport.java
new file mode 100644
index 0000000..ca370f4
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Java_Factory_Method/Transport.java
@@ -0,0 +1,5 @@
+package Creational_Pattern.Factory_Method.Java_Factory_Method;
+
+interface Transport{
+ void deliver();
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Java_Factory_Method/TransportFactory.java b/Creational_Pattern/Factory_Method/Java_Factory_Method/TransportFactory.java
new file mode 100644
index 0000000..8c91e3d
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Java_Factory_Method/TransportFactory.java
@@ -0,0 +1,16 @@
+package Creational_Pattern.Factory_Method.Java_Factory_Method;
+
+class TransportFactory{
+ private TransportFactory() { }
+
+ public static final Transport getTransport(TransportType transportType) {
+ switch (transportType) {
+ case TRUCK:
+ return new Truck();
+ case SHIP:
+ return new Ship();
+ default:
+ throw new IllegalArgumentException("This Transport type is unsupported");
+ }
+ }
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Java_Factory_Method/TransportType.java b/Creational_Pattern/Factory_Method/Java_Factory_Method/TransportType.java
new file mode 100644
index 0000000..6cddf8f
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Java_Factory_Method/TransportType.java
@@ -0,0 +1,5 @@
+package Creational_Pattern.Factory_Method.Java_Factory_Method;
+
+public enum TransportType{
+ TRUCK, SHIP
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Java_Factory_Method/Truck.java b/Creational_Pattern/Factory_Method/Java_Factory_Method/Truck.java
new file mode 100644
index 0000000..46fcca6
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Java_Factory_Method/Truck.java
@@ -0,0 +1,8 @@
+package Creational_Pattern.Factory_Method.Java_Factory_Method;
+
+class Truck implements Transport {
+ @Override
+ public void deliver() {
+ System.out.println("RoadTransport");
+ }
+}
diff --git a/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Ship.kt b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Ship.kt
new file mode 100644
index 0000000..4469495
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Ship.kt
@@ -0,0 +1,7 @@
+package Creational_Pattern.Factory_Method.Kotlin_Factory_Method
+
+class Ship : Transport {
+ override fun deliver() {
+ println("SeaTransport")
+ }
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Transport.kt b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Transport.kt
new file mode 100644
index 0000000..3ce070a
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Transport.kt
@@ -0,0 +1,5 @@
+package Creational_Pattern.Factory_Method.Kotlin_Factory_Method
+
+interface Transport {
+ fun deliver()
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/TransportFactory.kt b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/TransportFactory.kt
new file mode 100644
index 0000000..776a792
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/TransportFactory.kt
@@ -0,0 +1,10 @@
+package Creational_Pattern.Factory_Method.Kotlin_Factory_Method
+
+class TransportFactory {
+ companion object {
+ fun getTransport(type: TransportType) : Transport = when(type) {
+ TransportType.TRUCK -> Truck()
+ TransportType.SHIP -> Ship()
+ }
+ }
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/TransportType.kt b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/TransportType.kt
new file mode 100644
index 0000000..aaf78ff
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/TransportType.kt
@@ -0,0 +1,5 @@
+package Creational_Pattern.Factory_Method.Kotlin_Factory_Method
+
+enum class TransportType {
+ TRUCK, SHIP
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Truck.kt b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Truck.kt
new file mode 100644
index 0000000..b540d39
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/Truck.kt
@@ -0,0 +1,7 @@
+package Creational_Pattern.Factory_Method.Kotlin_Factory_Method
+
+class Truck : Transport {
+ override fun deliver() {
+ println("RoadTransport")
+ }
+}
\ No newline at end of file
diff --git a/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/main.kt b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/main.kt
new file mode 100644
index 0000000..6fb77d9
--- /dev/null
+++ b/Creational_Pattern/Factory_Method/Kotlin_Factory_Method/main.kt
@@ -0,0 +1,6 @@
+package Creational_Pattern.Factory_Method.Kotlin_Factory_Method
+
+fun main() {
+ val transport = TransportFactory.getTransport(TransportType.TRUCK)
+ transport.deliver() // RoadTransport
+}
\ No newline at end of file