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