From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/examples/Listing1014.java | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java') 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 -- cgit v1.2.3