Java >> Java Tutorial >  >> Java

Entwurfsmuster – Baumuster – Teil V

In Fortsetzung der Reihe von Beiträgen zu Designmustern werden wir in diesem Beitrag über Builder-Muster sprechen. Das Builder-Muster ist vom Typ eines schöpferischen Entwurfsmusters. Eine der Hauptverwendungen von Builder-Mustern ist, wenn zu viele Konstruktorparameter zu handhaben sind.

In meinem vorherigen Beitrag habe ich zeigt, wie man Fabrikmuster verwendet.

Wann ist Builder Pattern zu verwenden?

Das Builder-Muster erzwingt einen schrittweisen Ansatz zum Erstellen eines komplexen Objekts. Das Objekt kann nicht verwendet werden, bis es ein fertiges Produkt ist. Es hilft, komplexe Erstellungslogik zu kapseln. Eines der Beispiele aus der Echtzeit ist die Dateierstellung mit einem Format. Wenn Sie eine Datei in einem bestimmten Format erstellen (z. B. xml, csv), können Sie ein Builder-Muster verwenden, um einen einfachen logischen Ansatz zum Erstellen einer Datei zu erstellen.

Wie verwende ich das Builder-Pattern?

In letzter Zeit arbeite ich an einem Projekt zum Erstellen einer EDI-Datei zur Übertragung zwischen Kunden und muss eine Datei im Format 834 erstellen. Das Dateiformat 834 variiert also je nach Krankenkasse. Dieses Dateiformat enthält Header, Records und Trailer. Header zeigen unterschiedliche Paradigmen über die Datei und den Kunden und wer sie sendet. Um ein Beispiel für dieses Muster zu zeigen, werde ich einen der Header dieses Dateiformats verwenden und zeigen, wie es mit dem Builder-Muster erstellt werden kann.

Einer der Header heißt Transactional Group Header. Dieser Header sieht in einer echten Datei wie unten aus

ST*834*5432853*005010X220A1~

Erstes Feld „ST “ gibt an, dass es sich um eine Transaktionsgruppe handelt. Alle Datensätze eines Kunden können zwischen ST liegen und SE . 834 ist ein Transaktionscode für das Dateiformat. Da es sich um das Dateiformat 834 handelt, lautet der Code 834. 5432853 ist eine eindeutige Transaktionskontrollnummer, die zwischen 4 Ziffern und maximal 9 Ziffern lang sein kann. 005010X220A1 ist eine Implementierungsreferenznummer.

Unsere Implementierung der Klasse mit Feldern für jedes dieser Felder aus dem Header, einem privaten Konstruktor und einer statischen Builder-Klasse. Dies wird unten gezeigt:

public class TransactionalHeader implements Serializable {
private static final long serialVersionUID = 7517644545656169045L;

private String st;

private String transactioncode;

private String transactioncontrolnumber;

private String implementationreference;

public static class Builder {

private String st;

private String transactioncode;

private String transactioncontrolnumber;

private String implementationreference;

public Builder st(String st) {

this.st = st; return this;

}

public Builder transactioncode(String transactioncode) {

this.transactioncode = transactioncode; return this;

}

public Builder transactioncontrolnumber(String transactioncontrolnumber) {                            this.transactioncontrolnumber = transactioncontrolnumber; return this;

}

public Builder implementationreference(String implementationreference) {                                this.implementationreference = implementationreference; return this;

}

public TransactionalHeader build() {

return new TransactionalHeader(this);

}

}

private TransactionalHeader(Builder builder) {

this.st = builder.st;

this.transactioncode = builder.transactioncode;

this.transactioncontrolnumber = builder.transactioncontrolnumber;

this.implementationreference = builder.implementationreference;

}

public String toString() {

String result = "";

StringBuffer sb = new StringBuffer();

sb.append(st);

sb.append(FileUtil.FIELD_SPLITTER);

sb.append(transactioncode);

sb.append(FileUtil.FIELD_SPLITTER);

sb.append(transactioncontrolnumber);

sb.append(FileUtil.FIELD_SPLITTER);

sb.append(implementationreference);

sb.append("~");

result = sb.toString();

return result;

}

}

Das war unsere Baumeisterklasse. Lassen Sie uns eine Demoklasse erstellen, die diese Builder-Klasse verwendet, um ein Objekt zu erstellen, das uns einen Transaktionsheader in einer Datei liefert. Dies sieht wie folgt aus:

public String getTransactionalHeader() {

String result = "";

TransactionalHeader th = new TransactionalHeader.Builder()

.st("ST")

.transactioncode(TRANSACTION_IDENTIFIER_CODE)

.transactioncontrolnumber(FileUtil.getTransactionControlNumber())

.implementationreference("005010X220A1").build();

result = th.toString();

return result;

}

Schlussfolgerung

Auf diese Weise können wir Builder-Entwurfsmuster verwenden, um komplexe Objekte zu erstellen. Eine der einfachen Möglichkeiten, um zu erkennen, wann dieses Entwurfsmuster verwendet werden sollte, ist, wenn Sie mehr als 4 oder mehr Parameter in Ihrem Konstruktor haben.

Der Code für diesen Beitrag kann hier heruntergeladen werden.


Java-Tag