Heim  >  Artikel  >  Java  >  Beispiele für Builder-Muster in Java-Entwurfsmustern

Beispiele für Builder-Muster in Java-Entwurfsmustern

黄舟
黄舟Original
2017-09-22 11:29:551698Durchsuche

In diesem Artikel wird hauptsächlich das Builder-Muster, ein Java-Entwurfsmuster, vorgestellt und das Konzept, die Prinzipien, die Implementierungsmethoden und die damit verbundenen Vorsichtsmaßnahmen für die Verwendung des Builder-Musters anhand konkreter Beispiele analysiert

Die Beispiele in diesem Artikel beschreiben das Builder-Muster von Java-Entwurfsmustern. Teilen Sie es wie folgt mit allen als Referenz:

Builder-Modus (Builder) kann Komponenten und ihren Montageprozess Schritt für Schritt trennen.

Benutzer müssen nur den Typ eines komplexen Objekts angeben, um das Objekt zu erhalten, ohne seine internen spezifischen Konstruktionsdetails zu kennen.

Wann würde das Builder-Muster verwendet werden?

Ich persönlich verstehe, dass bei der Erstellung der von uns erstellten Objekte Logik erforderlich ist.

Wenn wir beispielsweise ein einfaches Pojo-Objekt erstellen möchten, können wir es einfach direkt und ohne Logik erstellen.

Wenn es ein komplexes Objekt gibt und Sie es erstellen möchten, besteht eine logische Beziehung zwischen seinen verschiedenen Eigenschaften.

Der einem Attribut zugewiesene Wert hängt von anderen Attributen ab. Dann ist die Entstehung dieses Objekts nicht einfach neu.

Bevor wir erstellen, müssen wir diese Logik klar formulieren.

Der Baumodus macht es für Kunden überflüssig, zu viele interne Details des Produkts zu kennen. Es kapselt die Zusammensetzung und Darstellung komplexer Objekte in einer bestimmten Konstruktionsrolle, und der Leiter koordiniert die Konstruktionsrolle, um bestimmte Produktinstanzen zu erhalten.

Sein Modell:

Abstrakte Produktklasse Produkt


package org.test.design.build;
/**
 * 影视,书籍等作品
 * @author lushuaiyin
 *
 */
public abstract class Product {
  public String author;//作者
  public int funds=0;//耗资
  public String workName;//作品名称
  public String workType;//作品类型
  public String content;//其他信息
  public String getAuthor() {
    return author;
  }
  public void setAuthor(String author) {
    this.author = author;
  }
  public int getFunds() {
    return funds;
  }
  public void setFunds(int funds) {
    this.funds = funds;
  }
  public String getWorkName() {
    return workName;
  }
  public void setWorkName(String workName) {
    this.workName = workName;
  }
  public String getWorkType() {
    return workType;
  }
  public void setWorkType(String workType) {
    this.workType = workType;
  }
  public String getContent() {
    return content;
  }
  public void setContent(String content) {
    this.content = content;
  }
  public String printString() {
    return "Product [author=" + author + ", funds=" + funds + ", workName="
        + workName + ", workType=" + workType + ", content=" + content
        + "]";
  }
}

Filmbuch der spezifischen Produktkategorie


package org.test.design.build;
public class Movie extends Product{
  private String actor;//主演
  private String director;//导演
  public String getActor() {
    return actor;
  }
  public void setActor(String actor) {
    this.actor = actor;
  }
  public String getDirector() {
    return director;
  }
  public void setDirector(String director) {
    this.director = director;
  }
}


package org.test.design.build;
public class Book extends Product {
  private int price=0;
  public int getPrice() {
    return price;
  }
  public void setPrice(int price) {
    this.price = price;
  }
}

Abstract Builder Builder


package org.test.design.build;
/**
 * 对象的构建逻辑描述
 * 影视,书籍等作品创建步骤
 * @author lushuaiyin
 *
 */
public interface Builder {
  void recruiting();//人员招募
  void writeScript();//写剧本,书
  void raiseFunds();//筹集资金
  void propagate();//宣传
  void released();//出版,发行,上映
  Product buildProduct();
}

Spezifischer Builder MovieBuilder BookBuilder


package org.test.design.build;
/**
 * Movie对象的构建逻辑具体实施
 * @author lushuaiyin
 *
 */
public class MovieBuilder implements Builder {
  public Product movie=new Movie();//这里是上转型对象的使用
  /*
   假如我们创建的对象只关心行为特征,那么就可以使用父类或者接口来声明对象。
  这样就不会在创建的时候就不会涉及到具体对象类的其他私有属性。
  如果我们在创建的时候,关心这些属性。那么就直接使用子类new出对象。
  Movie movie=new Movie();
   */
  public void recruiting() {
    movie.setAuthor("詹姆斯·卡梅隆");
  }
  public void writeScript() {
    movie.setWorkName("阿凡达");
  }
  public void raiseFunds() {
    movie.setFunds(200000);
  }
  public void propagate() {
    movie.setContent("首部3D科幻巨作!");
  }
  public void released() {
    movie.setWorkType("3D电影");
  }
  public Product buildProduct() {
    return movie;
  }
}


package org.test.design.build;
/**
 * Book对象的构建逻辑具体实施
 * @author lushuaiyin
 *
 */
public class BookBuilder implements Builder {
  public Product book=new Book();//这里是上转型对象的使用
  public void recruiting() {
    book.setAuthor("J.K.罗琳著小说");
  }
  public void writeScript() {
    book.setWorkName("哈利·波特与魔法石");
  }
  public void raiseFunds() {
    book.setFunds(10000);
  }
  public void propagate() {
    book.setContent("最畅销的的魔幻小说!");
  }
  public void released() {
    book.setWorkType("小说");
  }
  public Product buildProduct() {
    return book;
  }
}

Regisseur Regisseur


package org.test.design.build;
/**
 * 指挥者角色
 * @author lushuaiyin
 *
 */
public class Director {
  public Product bulidProduct(Builder builder){
    builder.raiseFunds();//筹集资金
    builder.recruiting();//招募人员
    builder.propagate();//宣传
    builder.released();//发行,上映
    return builder.buildProduct();
  }
}

Test:


package org.test.design.build;
public class TestMain {
  /**
   * @param args
   */
  public static void main(String[] args) {
    Director director=new Director();//指挥者角色
    //一部电影的产生
    MovieBuilder movieBuilder=new MovieBuilder();
    Product movie=director.bulidProduct(movieBuilder);
    System.out.println(movie.printString());
    // 一部小说的产生
    BookBuilder bookBuilder=new BookBuilder();
    Product book=director.bulidProduct(bookBuilder);
    System.out.println(book.printString());
  }
}
/*打印
Product [author=詹姆斯·卡梅隆, funds=200000, workName=null, workType=3D电影, content=首部3D科幻巨作!]
Product [author=J.K.罗琳著小说, funds=10000, workName=null, workType=小说, content=最畅销的的魔幻小说!]
*/

Das obige ist der detaillierte Inhalt vonBeispiele für Builder-Muster in Java-Entwurfsmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn