이번에는 빌더 모드 사용법과 빌더 모드 사용 시 주의사항에 대해 알려드리겠습니다. 실제 사례를 살펴보겠습니다.
개요
빌더 패턴: 복잡한 객체의 구성을 표현과 분리하여 동일한 구성 프로세스가 다른 표현을 만들 수 있도록 합니다.
사용 시나리오
동일한 방법, 다른 실행 순서, 다른 이벤트 결과 생성
여러 구성 요소 또는 부품을 하나의 개체로 조립할 수 있지만 결과 실행 결과가 다른 경우
제품 클래스가 매우 복잡하거나 제품 클래스의 호출 순서가 다른 효과를 가집니다
매개변수가 많고 많은 매개변수에 기본값이 있는 등 객체 초기화가 특히 복잡한 경우
다음은 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 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 도서:
위 내용은 빌더 모드를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!