빌더 모드를 사용하는 방법은 무엇입니까?

php中世界最好的语言
풀어 주다: 2018-05-03 15:29:15
원래의
1758명이 탐색했습니다.

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

개요

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

사용 시나리오

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

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

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

  • 매개변수가 많고 많은 매개변수에 기본값이 있는 등 객체 초기화가 특히 복잡한 경우

다음은 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("빌더 모드를 사용하여 테스트") .build();

Android 소스 코드의 빌더 모드

  • AlertDialog 소스 코드

  • Universal-Image-Loader 사진 라이브러리

  • OkHttp 소스 코드 요청

장점:

  • 좋은 캡슐화, Builder 패턴을 사용하면 클라이언트가 제품의 내부 구성에 대한 세부 사항을 알 수 없습니다.

  • Builder는 독립적이고 확장하기 쉽습니다(추상화를 통해 가능 - 인터페이스, 추상 클래스 )

단점:

  • 중복된 Builder 개체와 Director 개체를 생성하여 메모리를 소비합니다

요약: 빌더 패턴은 일반적으로 구성 클래스의 빌더로 사용되어 구성의 구성과 표시를 분리하여 너무 많은 setter 메서드를 피하기 위해 대상 클래스에서 구성을 격리합니다.

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

axios 데이터 상호 작용 단계에 대한 자세한 설명

Angular 구성 요소 사용 사례 자세한 설명

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!