summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java b/Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java
new file mode 100644
index 0000000..bbc6fe3
--- /dev/null
+++ b/Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java
@@ -0,0 +1,111 @@
+/* Listing1014.java */
+
+//------------------------------------------------------------------
+//Abstrakte Produkte
+//------------------------------------------------------------------
+abstract class Product1
+{
+}
+
+abstract class Product2
+{
+}
+
+//------------------------------------------------------------------
+//Abstrakte Factory
+//------------------------------------------------------------------
+abstract class ProductFactory
+{
+ public abstract Product1 createProduct1();
+
+ public abstract Product2 createProduct2();
+
+ public static ProductFactory getFactory(String variant)
+ {
+ ProductFactory ret = null;
+ if (variant.equals("A")) {
+ ret = new ConcreteFactoryVariantA();
+ } else if (variant.equals("B")) {
+ ret = new ConcreteFactoryVariantB();
+ }
+ return ret;
+ }
+
+ public static ProductFactory getDefaultFactory()
+ {
+ return getFactory("A");
+ }
+}
+
+//------------------------------------------------------------------
+//Konkrete Produkte für Implementierungsvariante A
+//------------------------------------------------------------------
+class Product1VariantA
+extends Product1
+{
+}
+
+class Product2VariantA
+extends Product2
+{
+}
+
+//------------------------------------------------------------------
+//Konkrete Factory für Implementierungsvariante A
+//------------------------------------------------------------------
+class ConcreteFactoryVariantA
+extends ProductFactory
+{
+ public Product1 createProduct1()
+ {
+ return new Product1VariantA();
+ }
+
+ public Product2 createProduct2()
+ {
+ return new Product2VariantA();
+ }
+}
+
+//------------------------------------------------------------------
+//Konkrete Produkte für Implementierungsvariante B
+//------------------------------------------------------------------
+class Product1VariantB
+extends Product1
+{
+}
+
+class Product2VariantB
+extends Product2
+{
+}
+
+//------------------------------------------------------------------
+//Konkrete Factory für Implementierungsvariante B
+//------------------------------------------------------------------
+class ConcreteFactoryVariantB
+extends ProductFactory
+{
+ public Product1 createProduct1()
+ {
+ return new Product1VariantB();
+ }
+
+ public Product2 createProduct2()
+ {
+ return new Product2VariantB();
+ }
+}
+
+//------------------------------------------------------------------
+//Beispielanwendung
+//------------------------------------------------------------------
+public class Listing1014
+{
+ public static void main(String[] args)
+ {
+ ProductFactory fact = ProductFactory.getDefaultFactory();
+ Product1 prod1 = fact.createProduct1();
+ Product2 prod2 = fact.createProduct2();
+ }
+} \ No newline at end of file