Technischer Projektleiter
Java-Entwurfsmuster (design pattern): Factory
In diesem Artikel werden wir uns ein weiteres Java Entwurfsmuster (Java design pattern) aus der Kategorie der Muster für die Erstellung von Objekten (Kreationsmuster) ansehen – Factory. Lies mehr über weitere Design Patterns – eine Serie von Entwurfsmustern:
- Entwurfsmuster Singleton
- Entwurfsmuster Builder
- Entwurfsmuster Prototyp
- Entwurfsmuster Abstract Factory
- Entwurfsmuster Adapter
Was ist Factory Entwurfsmuster?
Design Pattern Factory ist ein Software Entwurfsmuster, dessen Hauptziel es ist, einen einfachen und flexiblen Weg zur Erstellung von Klasseninstanzen zu bieten, ohne dass bestimmte Klassen direkt im Client-Code angegeben werden müssen.
Welches Problem wird durch das Factory Entwurfsmuster gelöst?
Wenn wir Klassen haben, die eine gemeinsame Schnittstelle implementieren oder davon abgeleitet sind, möchten wir Instanzen dieser Klassen erstellen können, ohne eine bestimmte Klasse direkt erwähnen zu müssen. Das ist nützlich, wenn wir nicht möchten, dass der Client-Code an eine konkrete Implementierung gebunden ist, sondern ein Objekt basierend auf einem bestimmten Parameter oder einer Bedingung erhalten möchten.
Beispiel einer Factory Implementierung in Java
Nun zeigen wir, wie man das Factory Muster in Java implementiert. Dieses Beispiel zeigt, wie das Factory-Muster es ermöglicht, verschiedene Objekttypen (Schokoladen) mithilfe einer einzigen Factory-Klasse zu erstellen, ohne dass im Client-Code die konkreten Klassen direkt angegeben werden müssen. Chocolate.java: In diesem Beispiel haben wir eine abstrakte Klasse Chocolate erstellt, die Schokolade repräsentiert.
package designpatterns;
// Abstract class representing chocolate
public abstract class Chocolate {
public abstract void taste();
}
Milka.java, Lindt.javaAnschließend haben wir zwei konkrete Klassen Milka und Lindt implementiert, die die abstrakte Klasse Chocolate erweitern. Jede dieser Klassen definiert ihre eigene Implementierung der Methode ochutnat().
package designpatterns;
// Concrete implementation of Lindt brand chocolate
public class Lindt extends Chocolate {
@Override
public void taste() {
System.out.println("Lindt: Velvety and luxurious taste");
}
}
// Concrete implementation of Milka brand chocolate
public class Milka extends Chocolate {
@Override
public void taste() {
System.out.println("Milka: Sweet and milky taste");
}
}
ChocolateFactory.java: Anschließend haben wir die Klasse ChocolateFactory erstellt, die verwendet wird, um Schokoladeninstanzen basierend auf der Marke zu erzeugen. Die Methode makeChocolate(String znacka) erstellt eine Schokolade basierend auf dem übergebenen Parameter znacka. Wenn die Marke Milka ist, wird eine Instanz der Klasse Milka erstellt. Wenn die Marke Lindt ist, wird eine Instanz der Klasse Lindt erstellt. Wenn eine unbekannte Marke angegeben wird, wird eine IllegalArgumentException ausgelöst.
package designpatterns;
// Factory class for chocolate production
public class ChocolateFactory {
public Chocolate makeChocolate(String brand) {
if(brand.equalsIgnoreCase("Milka")) {
return new Milka();
}
else if(brand.equalsIgnoreCase("Lindt")) {
return new Lindt();
}
else {
throw new IllegalArgumentException("Unknown chocolate brand: " + brand);
}
}
}
Main.java: Im Client-Code haben wir eine Instanz von ChocolateFactory erstellt und damit Schokolade der Marken Milka und Lindt erzeugt und probiert.
import designpatterns.*;
// Example
public class Main {
public static void main(String[] args) {
ChocolateFactory factory = new ChocolateFactory();
// Making and tasting of Milka brand chocolate
Chocolate milka = factory.makeChocolate("Milka");
milka.taste();
// Making and tasting of Lindt brand chocolate
Chocolate lindt = factory.makeChocolate("Lindt");
lindt.taste();
}
}
Programmausgabe Wir haben die Dateien mit dem oben genannten Java Factory Beispiel in Form von Code vorbereitet, den Sie direkt in Java ausführen können. Laden Sie den Code hier herunter. Wenn Sie als Java-Programmierer auf der Suche nach einem Job sind, lesen Sie mehr über das Gehalt von Programmierern und sehen Sie sich unsere aktuellen Stellenausschreibungen an.