From 2b53b3c7e126a1df2ee7994feed50e376c076765 Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Wed, 9 Dec 2020 21:39:27 +0100
Subject: [PATCH] Add abstract factory example

---
 src/schrauben/Client.java            | 34 ++++++++++++++++++++++++++++
 src/schrauben/IAbstrakteFabrik.java  |  9 ++++++++
 src/schrauben/IMutter.java           |  6 +++++
 src/schrauben/ISchraube.java         |  6 +++++
 src/schrauben/KonkreteFabrikM10.java | 14 ++++++++++++
 src/schrauben/KonkreteFabrikM6.java  | 14 ++++++++++++
 src/schrauben/MutterM10.java         |  9 ++++++++
 src/schrauben/MutterM6.java          |  9 ++++++++
 src/schrauben/SchraubeM10.java       |  9 ++++++++
 src/schrauben/SchraubeM6.java        |  9 ++++++++
 src/schrauben/Test.java              | 19 ++++++++++++++++
 11 files changed, 138 insertions(+)
 create mode 100644 src/schrauben/Client.java
 create mode 100644 src/schrauben/IAbstrakteFabrik.java
 create mode 100644 src/schrauben/IMutter.java
 create mode 100644 src/schrauben/ISchraube.java
 create mode 100644 src/schrauben/KonkreteFabrikM10.java
 create mode 100644 src/schrauben/KonkreteFabrikM6.java
 create mode 100644 src/schrauben/MutterM10.java
 create mode 100644 src/schrauben/MutterM6.java
 create mode 100644 src/schrauben/SchraubeM10.java
 create mode 100644 src/schrauben/SchraubeM6.java
 create mode 100644 src/schrauben/Test.java

diff --git a/src/schrauben/Client.java b/src/schrauben/Client.java
new file mode 100644
index 0000000..ebd4fae
--- /dev/null
+++ b/src/schrauben/Client.java
@@ -0,0 +1,34 @@
+package schrauben;
+
+public class Client 
+{ 
+   private IAbstrakteFabrik abstrakteFabrik = null; 
+   private ISchraube abstraktesProduktA = null; 
+   private IMutter abstraktesProduktB = null; 
+
+   public void setAbstrakteFabrik (IAbstrakteFabrik fabrikRef)
+   { 
+       this.abstrakteFabrik = fabrikRef; 
+   } 
+
+   public void erzeugeProdukte() 
+   { 
+      if (abstrakteFabrik != null)
+      { 
+         abstraktesProduktA =
+           abstrakteFabrik.erzeugeSchraube(); 
+         abstraktesProduktB =
+           abstrakteFabrik.erzeugeMutter(); 
+      } 
+   }   
+
+   public void produktAusgabe() 
+   { 
+      if (abstraktesProduktA != null && 
+             abstraktesProduktB != null) 
+      { 
+         abstraktesProduktA.printSchraube();          
+         abstraktesProduktB.printMutter(); 
+      } 
+   } 
+}
diff --git a/src/schrauben/IAbstrakteFabrik.java b/src/schrauben/IAbstrakteFabrik.java
new file mode 100644
index 0000000..1af944f
--- /dev/null
+++ b/src/schrauben/IAbstrakteFabrik.java
@@ -0,0 +1,9 @@
+package schrauben;
+
+// IAbstrakteFabrik hat zwei Methoden. Jede erzeugt 
+// eine andere Instanz eines Produktes (IMutter und ISchraube). 
+public interface IAbstrakteFabrik 
+{ 
+   public ISchraube erzeugeSchraube(); 
+   public IMutter erzeugeMutter(); 
+}
diff --git a/src/schrauben/IMutter.java b/src/schrauben/IMutter.java
new file mode 100644
index 0000000..5e75bd9
--- /dev/null
+++ b/src/schrauben/IMutter.java
@@ -0,0 +1,6 @@
+package schrauben;
+
+public interface IMutter 
+{ 
+   public void printMutter();    
+}
diff --git a/src/schrauben/ISchraube.java b/src/schrauben/ISchraube.java
new file mode 100644
index 0000000..5a862dd
--- /dev/null
+++ b/src/schrauben/ISchraube.java
@@ -0,0 +1,6 @@
+package schrauben;
+
+public interface ISchraube 
+{ 
+   public void printSchraube(); 
+}
diff --git a/src/schrauben/KonkreteFabrikM10.java b/src/schrauben/KonkreteFabrikM10.java
new file mode 100644
index 0000000..3c38374
--- /dev/null
+++ b/src/schrauben/KonkreteFabrikM10.java
@@ -0,0 +1,14 @@
+package schrauben;
+
+public class KonkreteFabrikM10 implements IAbstrakteFabrik 
+{ 
+   public ISchraube erzeugeSchraube()
+   { 
+      return new SchraubeM10(); 
+   } 
+
+   public IMutter erzeugeMutter() 
+   { 
+      return new MutterM10(); 
+   } 
+}
diff --git a/src/schrauben/KonkreteFabrikM6.java b/src/schrauben/KonkreteFabrikM6.java
new file mode 100644
index 0000000..08492e8
--- /dev/null
+++ b/src/schrauben/KonkreteFabrikM6.java
@@ -0,0 +1,14 @@
+package schrauben;
+
+public class KonkreteFabrikM6 implements IAbstrakteFabrik 
+{ 
+   public ISchraube erzeugeSchraube()
+   { 
+      return new SchraubeM6(); 
+   } 
+
+   public IMutter erzeugeMutter() 
+   { 
+      return new MutterM6(); 
+   } 
+}
diff --git a/src/schrauben/MutterM10.java b/src/schrauben/MutterM10.java
new file mode 100644
index 0000000..4de428c
--- /dev/null
+++ b/src/schrauben/MutterM10.java
@@ -0,0 +1,9 @@
+package schrauben;
+
+public class MutterM10 implements IMutter
+{ 
+   public void printMutter() 
+   { 
+      System.out.println ("Mutter mit M10 Gewinde.");           
+   }
+}
diff --git a/src/schrauben/MutterM6.java b/src/schrauben/MutterM6.java
new file mode 100644
index 0000000..b07db3a
--- /dev/null
+++ b/src/schrauben/MutterM6.java
@@ -0,0 +1,9 @@
+package schrauben;
+
+public class MutterM6 implements IMutter
+{ 
+   public void printMutter() 
+   { 
+      System.out.println ("Mutter mit M6 Gewinde."); 
+   } 
+}
diff --git a/src/schrauben/SchraubeM10.java b/src/schrauben/SchraubeM10.java
new file mode 100644
index 0000000..14c196c
--- /dev/null
+++ b/src/schrauben/SchraubeM10.java
@@ -0,0 +1,9 @@
+package schrauben;
+
+public class SchraubeM10 implements ISchraube 
+{ 
+   public void printSchraube() 
+   { 
+      System.out.println ("Schraube mit M10 Gewinde.");
+   } 
+}
diff --git a/src/schrauben/SchraubeM6.java b/src/schrauben/SchraubeM6.java
new file mode 100644
index 0000000..4ffa1ab
--- /dev/null
+++ b/src/schrauben/SchraubeM6.java
@@ -0,0 +1,9 @@
+package schrauben;
+
+public class SchraubeM6 implements ISchraube 
+{ 
+   public void printSchraube() 
+   { 
+      System.out.println ("Schraube mit M6 Gewinde.");
+   } 
+}
diff --git a/src/schrauben/Test.java b/src/schrauben/Test.java
new file mode 100644
index 0000000..94bf497
--- /dev/null
+++ b/src/schrauben/Test.java
@@ -0,0 +1,19 @@
+package schrauben;
+
+public class Test 
+{ 
+   public static void main (String[] args)
+   { 
+      Client c = new Client(); 
+      
+      c.setAbstrakteFabrik (new KonkreteFabrikM6()); 
+      c.erzeugeProdukte();      
+      c.produktAusgabe(); 
+
+      System.out.println();
+      
+      c.setAbstrakteFabrik (new KonkreteFabrikM10()); 
+      c.erzeugeProdukte();      
+      c.produktAusgabe(); 
+    }
+}
-- 
GitLab