Builder-Entwurfsmuster

In diesem Tutorial werde ich das Builder-Entwurfsmuster erläutern. Dies ist eines der am häufigsten verwendeten Entwurfsmuster in Java. Das Builder-Entwurfsmuster fällt unter das schöpferische Entwurfsmuster, da das Builder-Entwurfsmuster bei der schrittweisen Erstellung eines Objekts hilft.

Abonnieren Sie unsere zukünftigen Updates.

Das Builder-Entwurfsmuster löst das Problem der Erstellung eines Objekts mit vielen Parametern, bei dem einige Parameter obligatorisch und andere optional sind. Das Builder-Entwurfsmuster ist dem abstrakten Fabrikentwurfsmuster sehr ähnlich. Der Hauptunterschied zwischen abstraktem Factory-Muster und Builder-Muster besteht darin, dass im abstrakten Factory-Muster Factory-Methoden die Objekte erstellen. Beim Builder-Muster werden dem Builder jedoch klare Anweisungen mit einer schrittweisen Vorgehensweise zum Erstellen der Objekte gegeben. Das bedeutet, dass Sie die vollständige Kontrolle darüber haben, was in die Objekterstellung einbezogen und ausgeschlossen werden soll.

Builder-Muster

(Bildquelle)

Beispiel für ein Builder-Entwurfsmuster

Hier ist ein sehr einfaches Beispiel, das zeigt, wie das Builder-Entwurfsmuster zum Erstellen der Objekte verwendet wird. In diesem Beispiel für ein Builder-Entwurfsmuster erstelle ich ein Family Objekt mit dem FamilyBuilder. Hier, wenn Sie bemerken, FamilyBuilder Die Klasse ist eine statische Klasse, wobei jede Methode dem Objekt eine Eigenschaft hinzufügt. Schließlich, a build Damit ist die Objekterstellung abgeschlossen. Ich hoffe, dass dieses Beispiel Ihnen hilft, die Verwendung des Builder-Entwurfsmusters zu verstehen. Wenn Sie Fragen haben, schreiben Sie diese bitte in den Kommentarbereich.
Familie.java

package net.javabeat.designpatterns.builderpattern;

import java.util.List;

public class Family {
	private String familyName;
	private String husband;
	private String wife;
	private int numberOfKids;
	private List<String> kidsNames;
	private int annualIncome;
	private boolean isCarOwned;
	private boolean isHouseOwned;
	private String city;
	private String country;
	
	private Family(FamilyBuilder builder){
		this.familyName = builder.familyName;
		this.husband = builder.husband;
		this.wife = builder.wife;
		this.numberOfKids = builder.numberOfKids;
		this.kidsNames = builder.kidsNames;
		this.annualIncome = builder.annualIncome;
		this.isCarOwned = builder.isCarOwned;
		this.isHouseOwned = builder.isHouseOwned;
		this.city = builder.city;
		this.country = builder.country;
	}
	//All getter, and NO setter to provide immutability
	public String getFamilyName() {
		return familyName;
	}

	public String getHusband() {
		return husband;
	}

	public String getWife() {
		return wife;
	}

	public int getNumberOfKids() {
		return numberOfKids;
	}

	public List<String> getKidsNames() {
		return kidsNames;
	}

	public int getAnnualIncome() {
		return annualIncome;
	}

	public boolean isCarOwned() {
		return isCarOwned;
	}

	public boolean isHouseOwned() {
		return isHouseOwned;
	}

	public String getCity() {
		return city;
	}

	public String getCountry() {
		return country;
	}
	
	public String toString(){
		StringBuilder result = new StringBuilder();
		result.append("Family Name : "+this.familyName);
		result.append("\nHusband Name : "+this.husband);
		result.append("\nWife Name : "+this.wife);
		result.append("\nNumber of Kids : "+this.numberOfKids);
		result.append("\nKids Names : "+this.kidsNames);
		result.append("\nAnnual Income : "+this.annualIncome);
		result.append("\nIs Own Car : "+this.isCarOwned);
		result.append("\nIs Own House : "+this.isHouseOwned);
		result.append("\nCity : "+this.city);
		result.append("\nCountry : "+this.country);
		return result.toString();
	}

	public static class FamilyBuilder{
		private String familyName;
		private String husband;
		private String wife;
		private int numberOfKids;
		private List<String> kidsNames;
		private int annualIncome;
		private boolean isCarOwned;
		private boolean isHouseOwned;
		private String city;
		private String country;	
		public FamilyBuilder(String familyName){
			this.familyName = familyName;
		}
		FamilyBuilder husband(String husband){
			this.husband = husband;
			return this;
		}
		FamilyBuilder wife(String wife){
			this.wife = wife;
			return this;
		}
		FamilyBuilder kids(int kids){
			this.numberOfKids = kids;
			return this;
		}
		FamilyBuilder kidsNames(List kidsNames){
			this.kidsNames = kidsNames;
			return this;
		}
		FamilyBuilder annualIncome(int annualIncome){
			this.annualIncome = annualIncome;
			return this;
		}
		FamilyBuilder isCarOwned(boolean isCarOwned){
			this.isCarOwned = isCarOwned;
			return this;
		}
		FamilyBuilder isHouseOwned(boolean isHouseOwned){
			this.isHouseOwned = isHouseOwned;
			return this;
		}
		FamilyBuilder city(String city){
			this.city = city;
			return this;
		}
		FamilyBuilder country(String country){
			this.country = country;
			return this;
		}	
		//Return the finally construcuted Family object
        public Family build() {
        	Family family =  new Family(this);            
            return family;
        }
	}
}

BuilderDesignPatternExample.java

package net.javabeat.designpatterns.builderpattern;

import java.util.ArrayList;
import java.util.List;

public class BuilderDesignPatternExample {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("Nancy");
		Family family = new Family.FamilyBuilder("Happy Family").husband("John").wife("Marry").
				kids(1).kidsNames(list).annualIncome(100000).isCarOwned(true).
				isHouseOwned(true).city("NewYork").country("USA").build();
		System.out.println(family);
	}
}

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen