diff --git a/src/schrauben/Client.java b/src/schrauben/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebd4fae9a9e84d208a0305da90e3cb0ebe0a993f
--- /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 0000000000000000000000000000000000000000..1af944f7833c1e22bf5efebc8dcb62d5d749e673
--- /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 0000000000000000000000000000000000000000..5e75bd940f3216ab1e6c5251f70bf60ed46e9f1c
--- /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 0000000000000000000000000000000000000000..5a862ddc14bc1a49a310200161d27e0155e4cbfc
--- /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 0000000000000000000000000000000000000000..3c383742827c4e3375b809315b179454f3d9ef28
--- /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 0000000000000000000000000000000000000000..08492e863f5f66d28f5b07fbef5e3948999fcdfd
--- /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 0000000000000000000000000000000000000000..4de428c140ab619b6d6e7afadd907bf1286ab878
--- /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 0000000000000000000000000000000000000000..b07db3aa76ffaa038d34eecc2846ca5945b857dc
--- /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 0000000000000000000000000000000000000000..14c196ce22a5bfbd3b32c49271db3a8d1b0342c8
--- /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 0000000000000000000000000000000000000000..4ffa1ab82456b930c5daa27bc45ed207d6348508
--- /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 0000000000000000000000000000000000000000..94bf4979854b5e281d10df8d4c06875447f223cf
--- /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(); 
+    }
+}