>  기사  >  웹 프론트엔드  >  빌더 모드 사용 방법

빌더 모드 사용 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-06-14 11:41:251301검색

이번에는 빌더 모드 사용법과 빌더 모드 사용 시 주의사항에 대해 알려드리겠습니다. 다음은 실제 사례입니다.

개요

빌더 패턴: 복잡한 객체의 구성을 표현과 분리하여 동일한 구성 프로세스가 다른 표현을 만들 수 있도록 합니다.

사용 시나리오

  • 동일한 방법, 다른 실행 순서, 다른 이벤트 결과 생성

  • 여러 구성 요소 또는 부품을 하나의 개체로 조립할 수 있지만 결과 실행 결과가 다른 경우

  • 제품 클래스가 매우 복잡하거나 제품 클래스의 호출 순서가 다른 효과를 가집니다

  • 객체 초기화가 매개변수가 많고 매개변수가 기본값을 갖는 등 특히 복잡할 때

The 다음은 Person 예제를 사용하여 겹치는 생성자 패턴, JavaBeans 패턴 및 Builder 패턴의 사용을 분석합니다. Person 클래스에는 두 개의 필수 매개변수(id 및 이름)와 5개의 선택적 매개변수(나이, 성별, 전화번호, 주소 및 설명)가 있습니다.

겹치는 생성자 모드

이 모드에서는 첫 번째 생성자가 필수 매개변수만 제공합니다. 매개 변수가 있는 경우 두 번째 생성자에는 하나의 선택적 매개 변수가 있고 세 번째 생성자에는 두 개의 선택적 매개 변수가 있는 식으로 마지막 생성자에 모든 선택적 매개 변수가 포함될 때까지 계속됩니다. 프로그래밍 구현을 살펴보겠습니다.

/ * 使用重叠构造器模式
 */
public class Person {
 //必要参数
 private final int id;
 private final String name;
 //可选参数
 private final int age;
 private final String sex;
 private final String phone;
 private final String address;
 private final String desc;
 public Person(int id, String name) {
 this(id, name, 0);
 }
 public Person(int id, String name, int age) {
 this(id, name, age, "");
 }
 public Person(int id, String name, int age, String sex) {
 this(id, name, age, sex, "");
 }
 public Person(int id, String name, int age, String sex, String phone) {
 this(id, name, age, sex, phone, "");
 }
 public Person(int id, String name, int age, String sex, String phone, String address) {
 this(id, name, age, sex, phone, address, "");
 }
 public Person(int id, String name, int age, String sex, String phone, String address, String desc) {
 this.id = id;
 this.name = name;
 this.age = age;
 this.sex = sex;
 this.phone = phone;
 this.address = address;
 this.desc = desc;
 }
}

위 코드에서 인스턴스를 생성하려면 가장 짧은 매개변수 목록이 있는 생성자를 사용하세요. 하지만 목록에는 설정할 매개변수가 모두 포함되어 있습니다.

Person person = new Persion(1, "李四", 20, "男", "18800000000", "China", "测试使用重叠构造器模式");

겹치는 생성자 가능하지만 매개변수가 많으면 생성 및 사용 코드를 작성하고 읽기가 어렵습니다

JavaBeans 패턴

Javabean 작성 방법을 채택하고 속성에 대한 여러 setter 메소드를 작성하고 생성합니다. 로 개체를 만든 다음 setter 메서드를 호출하여 속성에 값을 할당합니다.

/ * 使用JavaBeans模式
 */
public class Person {
 //必要参数
 private int id;
 private String name;
 //可选参数
 private int age;
 private String sex;
 private String phone;
 private String address;
 private String desc;
 public void setId(int id) {
 this.id = id;
 }
 public void setName(String name) {
 this.name = name;
 }
 public void setAge(int age) {
 this.age = age;
 }
 public void setSex(String sex) {
 this.sex = sex;
 }
 public void setPhone(String phone) {
 this.phone = phone;
 }
 public void setAddress(String address) {
 this.address = address;
 }
 public void setDesc(String desc) {
 this.desc = desc;
 }

이 패턴은 겹치는 생성자 패턴의 단점을 보완합니다. 인스턴스 생성은 쉽고 결과 코드는 읽기 쉽습니다.

Person person = new Person();
person.setId(1);
person.setName("李四");
person.setAge(20);
person.setSex("男");
person.setPhone("18800000000");
person.setAddress("China");
person.setDesc("测试使用JavaBeans模式");

JavaBeans 패턴 구성 프로세스가 여러 호출로 나누어지기 때문에 구성 프로세스 중에 JavaBeans가 일관되지 않은 상태에 있을 수 있습니다. 클래스는 단순히 생성자 매개변수의 유효성을 확인하는 것만으로는 일관성을 보장할 수 없습니다.

빌더 패턴

빌더 패턴은 생성자가 겹치는 등 안전성을 보장할 수 있을 뿐만 아니라 JavaBean 패턴과 같은 가독성도 얻을 수 있습니다.

/**
 * 使用Builder模式
 */
public class Person {
 //必要参数
 private final int id;
 private final String name;
 //可选参数
 private final int age;
 private final String sex;
 private final String phone;
 private final String address;
 private final String desc;
 private Person(Builder builder) {
 this.id = builder.id;
 this.name = builder.name;
 this.age = builder.age;
 this.sex = builder.sex;
 this.phone = builder.phone;
 this.address = builder.address;
 this.desc = builder.desc;
 }
 public static class Builder {
 //必要参数
 private final int id;
 private final String name;
 //可选参数
 private int age;
 private String sex;
 private String phone;
 private String address;
 private String desc;
 public Builder(int id, String name) {
  this.id = id;
  this.name = name;
 }
 public Builder age(int val) {
  this.age = val;
  return this;
 }
 public Builder sex(String val) {
  this.sex = val;
  return this;
 }
 public Builder phone(String val) {
  this.phone = val;
  return this;
 }
 public Builder address(String val) {
  this.address = val;
  return this;
 }
 public Builder desc(String val) {
  this.desc = val;
  return this;
 }
 public Person build() {
  return new Person(this);
 }
 }
}

Person은 변경할 수 없으며 모든 기본 매개변수 값은 별도의 위치에 배치됩니다. 빌더의 setter 메소드는 빌더 자체를 반환하므로 체인에서 호출될 수 있습니다. 다음은 클라이언트 사용 코드입니다.

Person person = new Person.Builder(1, "Zhang San")
       .age(18).sex("Male").desc("Test using builder mode").build ( ;

이 기사의 사례를 읽었다고 생각합니다. 방법을 익힌 후 PHP 중국어 웹사이트의 다른 관련 기사를 주목하여 더 흥미로운 내용을 확인하세요! 추천 자료:

    Angular CLI가 라우팅을 작동하는 방법
  • Angularjs에서 컨트롤러의 상호 통신 기능에 대한 자세한 설명

위 내용은 빌더 모드 사용 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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