이번에는 빌더 모드 사용법에 대한 튜토리얼을 가져오겠습니다. 빌더 모드 사용 시 주의사항은 무엇인가요?
Overview
빌더 패턴: 복잡한 객체의 구성을 표현에서 분리하여 동일한 구성 프로세스가 다른 표현을 만들 수 있습니다.
사용 시나리오
동일한 방법, 다른 실행 순서, 다른 이벤트 결과 생성
여러 구성 요소 또는 부품을 하나의 개체로 조립할 수 있지만 결과 실행 결과가 다른 경우
제품 클래스가 매우 복잡하거나 제품 클래스의 호출 순서가 다른 효과를 가집니다
매개변수가 많고 많은 매개변수에 기본값이 있는 등 객체 초기화가 특히 복잡한 경우
다음은 Person 예제를 사용하여 중복되는 생성자 패턴, JavaBeans 패턴 및 Builder 패턴의 사용을 분석합니다. Person 클래스에는 두 개의 필수 매개변수(id 및 이름)와 5개의 선택적 매개변수(나이, 성별, 전화번호, 주소 및 설명)가 있습니다.
중복 생성자 모드
이 모드에서는 첫 번째 생성자가 필수 매개변수만 제공합니다. 매개 변수가 있는 경우 두 번째 생성자에는 하나의 선택적 매개 변수가 있고 세 번째 생성자에는 두 개의 선택적 매개 변수가 있는 식으로 마지막 생성자에 모든 선택적 매개 변수가 포함될 때까지 계속됩니다. 프로그래밍 구현을 살펴보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | / * 使用重叠构造器模式
*/
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;
}
}
|
로그인 후 복사
위 코드에서 인스턴스를 생성하려면 가장 짧은 매개변수 목록이 있는 생성자를 사용하세요. 하지만 목록에는 설정할 매개변수가 모두 포함되어 있습니다.
1 | Person person = new Persion(1, "李四" , 20, "男" , "18800000000" , "China" , "测试使用重叠构造器模式" );
|
로그인 후 복사
겹치는 생성자 가능하지만 매개변수가 많으면 생성 및 사용 코드를 작성하고 읽기가 어렵습니다
JavaBeans 패턴
Javabean 작성 방법을 채택하고 속성에 대한 여러 setter 메소드를 작성하고 생성합니다. 로 개체를 만든 다음 setter 메서드를 호출하여 속성에 값을 할당합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | / * 使用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;
}
|
로그인 후 복사
이 패턴은 겹치는 생성자 패턴의 단점을 보완합니다. 인스턴스 생성은 쉽고 결과 코드는 읽기 쉽습니다.
1 2 3 4 5 6 7 8 | 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 패턴과 같은 가독성도 얻을 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
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 소스 코드의 빌더 모드
장점:
좋은 캡슐화, Builder 패턴을 사용하면 클라이언트가 제품의 내부 구성에 대한 세부 사항을 알 수 없습니다.
-
Builder는 독립적이고 확장하기 쉽습니다(추상화를 통해 가능 - 인터페이스, 추상 클래스 )
단점:
요약: 빌더 패턴은 일반적으로 구성 클래스의 빌더로 사용되어 구성의 구성과 표시를 분리하여 너무 많은 setter 메서드를 피하기 위해 대상 클래스에서 구성을 격리합니다.
이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 도서:
JS는 원래 값과 참조 값을 어떻게 저장하나요?
JS 공통 함수 사용에 대한 자세한 설명
위 내용은 빌더 모드 사용법 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!