diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/examples/Listing1014.java | 111 |
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 |
