>Java >java지도 시간 >Java 디자인 패턴의 빌더 패턴 예

Java 디자인 패턴의 빌더 패턴 예

黄舟
黄舟원래의
2017-09-22 11:29:551799검색

이 글에서는 주로 Java 디자인 패턴인 Builder Pattern을 소개하고, Builder Pattern의 개념, 원리, 구현 방법 및 관련 사용 주의 사항을 구체적인 예와 함께 분석합니다. 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;
  }
}

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

콘크리트 건축 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.