ホームページ  >  記事  >  Java  >  Java デザイン パターンのビルダー パターンの例

Java デザイン パターンのビルダー パターンの例

黄舟
黄舟オリジナル
2017-09-22 11:29:551769ブラウズ

この記事では、主に Java の設計パターンである Builder パターンを紹介し、Builder パターンの概念、原則、実装方法、および関連する使用上の注意事項を具体的な例とともに分析します。必要な方は参考にしてください。 Java デザイン パターン ビルダー パターン。以下のように、参考のためにみんなに共有してください:

ビルダーモード (ビルダー)

は、コンポーネントとその組み立てプロセスを段階的に作成できます。 ユーザーは、内部の具体的な構造の詳細を知らなくても、複雑なオブジェクトのタイプを指定するだけでオブジェクトを取得できます。

ビルダー パターンはいつ使用されますか?

私たちが作成するオブジェクトには作成中にロジックが必要であることを個人的に理解しています。

たとえば、単純な pojo オブジェクトを作成したい場合は、ロジックを使用せずに new を使用して直接作成できます。

複雑なオブジェクトがあり、それを作成したい場合、そのさまざまなプロパティの間には論理的な関係が存在します。

属性の割り当てと値は、他の属性に依存します。したがって、このオブジェクトの作成は単に新しいものではありません。

作成する前に、このロジックを明確に記述する必要があります。

構築モードにより、顧客が製品の内部詳細を知りすぎることがなくなります。これは、複雑なオブジェクトの構成と表現を特定の構築ロールにカプセル化し、リーダーが構築ロールを調整して特定の製品インスタンスを取得します。

そのモデル:

抽象的な製品カテゴリ製品

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
        + "]";
  }
}

具体的な製品カテゴリ映画本

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;
  }
}

抽象ビルダーBuilder

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

コンクリート建設 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;
  }
}

ディレクターディレクター

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();
  }
}

テスト:

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=最畅销的的魔幻小说!]
*/

以上がJava デザイン パターンのビルダー パターンの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。