[JAVA] Einführung in Entwurfsmuster (Builder)

Dieser Artikel fasst Builder zusammen. Laut Wikipedia "ist es möglich, dynamische Objekte zu erstellen, indem der Prozess der Objekterstellung abstrahiert wird." Referenz: Builder-Muster

Dieses Muster besteht darin, dass in einer Klasse mehrere Konstruktoren zusammen gruppiert werden können. Es kann nur ein Konstruktor mit demselben Namen und Argument definiert werden. Wenn Sie mehrere Konstruktoren erstellen, ändern sich die Anzahl der Argumente und der Datentyp. Wenn die Anzahl zunimmt, wird es schwierig, dies zu tun, und die Lesbarkeit des Quellcodes nimmt ab. Also gehen wir die Argumente aus, die der Konstruktor erhält.

Implementierungsbeispiel

Erstellen Sie eine Klasse von Personen, die Namen, Alter, Größe und Gewicht als Parameter beibehalten

** Vor dem Anwenden des Musters **

public class Human {
    private String name;
    private Integer age;
    private Integer height;
    private Integer weight
    public Human(String name, Integer age, Integer height, Integer weight) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }
    public Human(String name) {
        this.name = name;
    }
    public Human(Integer age) {
        this.age = age;
    }
    public Human(Integer height, Integer weight) {
        this.height = height;
        this.weight = weight;
    }

}
public class Main {
    public static void main(String[] args) {
        Human ha = new Human("kusa");
        Human hb = new Human(1);
        Human hc = new Human(170, 70);
    }
}

** Nach dem Anwenden des Musters **

Builder.java


public interface Builder {
    public void name(String name);
    public void age(Integer age);
    public void height(Integer height);
    public void weight(Integer weight);
    public Human getResult();
}

HumanBuilder.java


class HumanBuilder implements Builder {
    private Human human;

    public HumanBuilder() { this.human = new Human(); }

    @Override
    public void name(String name) { human.setName(name); }
    @Override
    public void age(Integer age) { human.setAge(age); }
    @Override
    public void height(Integer height) { human.setHeight(height); }
    @Override
    public void weight(Integer weight) { human.setWeight(weight); }
    @Override
    public Human getResult() { return this.human; }
}

Human.java


public class Human {
    private String name;
    private Integer age;
    private Integer height;
    private Integer weight;

    public void setName(String name) { this.name = name;}
    public void setAge(Integer age) { this.age = age;}
    public void setHeight(Integer height) { this.height = height; }
    public void setWeight(Integer weight) { this.weight = weight; }

    public String getName() { return this.name; }
    public Integer getAge() { return this.age; }
    public Integer getHeight() { return this.height; }
    public Integer getWeight() { return this.weight; }

    public void hello() {
        System.out.printf("name is %s %n",name);
        System.out.printf("age is %d %n", age);
        System.out.printf("height is %d %n", height);
        System.out.printf("weight is %d %n", weight);
    }
}

Director.java


class Director {
    private Builder builder;

    public Director(Builder builder) { this.builder = builder; }

    public void construct() {
        builder.name("kusakari");
        builder.age(30);
        builder.height(175);
        builder.weight(70);
    }
}

Main.java


public class Main {
    public static void main(String[] args) {
        Builder builder = new HumanBuilder();
        Director director = new Director(builder);
        director.construct();
        builder.getResult().hello();
    }
}

Ergebnis


$ java Main
name is kusakari 
age is 30 
height is 175 
weight is 70

Wie oben erwähnt, ist die Sichtbarkeit des Quellcodes schlecht, wenn eine Klasse mehrere Konstruktoren enthält, und die Codemenge nimmt zu. Setzen Sie daher den Konstruktor in die Director-Klasse, erstellen Sie eine Instanz mit der HumanBuilder-Klasse, die die Builder-Schnittstelle implementiert, und Main.java greift über Getter auf die Instanz zu.

Recommended Posts

Einführung in Entwurfsmuster (Builder)
Einführung in Entwurfsmuster (Einführung)
Einführung in Entwurfsmuster (Composite)
Einführung in Designmuster (Fliegengewicht)
Einführung in Entwurfsmuster Prototyp
Einführung in Entwurfsmuster (Iterator)
Einführung in Entwurfsmuster (Strategie)
Einführung in Entwurfsmuster (Factory-Methode)
Einführung in Design Patterns (Abstract Factory)
Wichtiges Entwurfsmuster zur Verbesserung der Wartbarkeit
Einführung in Ruby 2
Verschiedene Designmuster
Entwurfsmuster ~ Builder ~
Entwurfsmuster (2): Builder
Java-Entwurfsmuster
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
Einführung in Java
Einführung in Doma
Einführung in JAR-Dateien
Einführung in Ratpack (8) -Session
Einführung in die Bitarithmetik
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in PlayFramework 2.7 ① Übersicht
Einführung in das Android-Layout
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in Ratpack (2) -Architektur
Einführung in den Lambda-Stil
Einführung in den Java-Befehl
Einführung in die Keycloak-Entwicklung
Studieren Sie GoF-Entwurfsmuster
Einführung in den Befehl javac
Ich las Hiroshi Yuki "Einführung in Designmuster, die in Java gelernt wurden" (SB Creative)
Einführung in effektives Java durch Üben und Lernen (Builder-Muster)
Einführung in die Android App-Entwicklung
Einführung in Ratpack (5) --Json & Registry
Einführung in Metabase ~ Umgebungskonstruktion ~
Einführung in Ratpack (7) - Guice & Spring
(Punktinstallation) Einführung in Java8_Impression
Verwendung von @Builder (Lombok)
Einführung in Micronaut 2 ~ Unit Test ~
Einführung in JUnit (Studiennotiz)
Einführung in Spring Boot ~ ~ DI ~
[Java] Einführung in den Lambda-Ausdruck
Einführung in Spring Boot ② ~ AOP ~
Einführung in Apache Beam (2) ~ ParDo ~
Einführung in die EHRbase 2-REST-API
Überdenken von Entwurfsmustern mit Java8-Lambda-Ausdrücken und Stream - Builder-Muster -