고급 빌더 디자인 패턴 — Java
소개:
각 디자인 패턴은 잘 알려진 문제를 해결하기 위해 제공됩니다.
Builder Design Patter 문제는 다음과 같습니다.
빌더 내부에 변수가 많은 클래스가 있습니다. Student 클래스가 있고 다른 유형의 변수 10개를 포함하는 생성자가 있다고 가정합니다. 팀원 중 한 명이 클래스의 개체를 만들고자 할 때 많은 변수로 인해 어려움에 직면하게 됩니다.
그래서 변수를 포함하지 않고 다른 setter를 사용하여 생성자에 필요한 매개 변수를 채우는 메서드를 제공하여 이 문제를 해결하기 위해 Builder 디자인 패턴이 개발되었습니다.
간단한 예:
빌더 디자인 패턴을 Student 예제에 적용하려고 합니다.
공개 수업 학생 {
private int id;
private String name;
private String major;
private String mobileNumber;
private double salary;
// Optional Private Constructor
pu Student(int id, String name, String major, String mobileNumber) {
this.id = id;
this.name = name;
this.major = major;
this.mobileNumber = mobileNumber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getMobileNumber() {
return mobileNumber;
}
public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Builder Design Patter를 적용하려면 데이터 변수를 수집할 새 클래스가 필요하고 사용자가 모든 매개변수 데이터를 채운 후 학생 클래스에서 객체를 생성하므로 'SimpleStudentBuilder' 클래스를 선언해야 합니다.
메모 :
빌더 디자인 패턴을 Student 예제에 적용하려고 합니다.
공개 수업 학생 {
private int id;
private String name;
private String major;
private String mobileNumber;
private double salary;
// Optional Private Constructor
pu Student(int id, String name, String major, String mobileNumber) {
this.id = id;
this.name = name;
this.major = major;
this.mobileNumber = mobileNumber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getMobileNumber() {
return mobileNumber;
}
public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}Builder Design Patter를 적용하려면 데이터 변수를 수집할 새 클래스가 필요하고 사용자가 모든 매개변수 데이터를 채운 후 학생 클래스에서 객체를 생성하므로 'SimpleStudentBuilder' 클래스를 선언해야 합니다.
메모 :
SimpleStudentBuilder 클래스:
//이 클래스는 Student 클래스 내부에 있습니다.
공개 정적 클래스 SimpleStudentBuilder {
private int id;
private String name;
private String major;
private String mobileNumber;
private double salary;
public SimpleStudentBuilder() {
}
public SimpleStudentBuilder setId(int id) {
this.id = id;
return this;
}
public SimpleStudentBuilder setName(String name) {
this.name = name;
return this;
}
public SimpleStudentBuilder setMajor(String major) {
this.major = major;
return this;
}
public SimpleStudentBuilder setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
return this;
}
public SimpleStudentBuilder setSalary(double salary) {
this.salary = salary;
return this;
}
public Student build() {
// TODO : Check All Require Parameters is not null
if (id == 0)
throw new NullPointerException("Id Can't be with out value");
if (name == null)
throw new NullPointerException("Name Can't be Null");
if (major == null)
throw new NullPointerException("Major Can't be Null");
if (mobileNumber == null)
throw new NullPointerException("Number Can't be Null");
Student student = new Student(id, name, major, mobileNumber);
student.salary = salary;
return student;
}
}
GitHub 리포지토리에서 전체 코드를 표시할 수 있습니다.
사용법 SimpleStudentBuilder :
공개 정적 무효 메인(문자열[] 인수) {
Student student = new Student.SimpleStudentBuilder()
.setMajor("IT")
.setName("Kareem Radwa")
.setMobileNumber("0597190510")
.setSalary(1000)
.setId(32)
.build();
}
딥 인 빌더 디자인 패턴 :)
Student Constructor에서 예를 들어 [ id, name, major, mobile number ] 순서로 매개 변수 값을 전달하는 데 우선 순위가 있다고 가정합니다. 이 배열이 사라지면 Class Student에서 개체를 만들 수 없습니다.
그래서 우리는 이 상황에 대한 답이 필요합니다. 답은 Step Builder이지만 이 답을 어떻게 구현할 수 있습니까? 계속 읽으세요 :)
스텝 빌더 디자인 패턴:
이 아이디어를 적용하려면 다음이 필요합니다.
동일한 수의 Require 변수가 있는 많은 인터페이스가 있으므로 우리의 학생 클래스 예제에서는 4개의 인터페이스가 필요하고 추가로 Build Method 및 선택적 변수에 대한 인터페이스가 하나 더 필요합니다.
클래스는 위의 모든 인터페이스를 구현합니다. 이 '단계'에는 캡션이 필요합니다.
사용법 StudentStepBuilder에 대한 설명:
빌더의 이 접근 방식을 사용해야 하는 경우 처음에만 ID 설정 방법을 표시해야 하며 사용자가 이를 입력하면 그 후에 이름 변수 값 등을 설정할 수 있습니다.
코딩 시간:
공개 클래스 StudentStepBuilder {
public static IdFiled newBuilder() {
return new Steps();
}
public static interface IdFiled {
NameFiled setId(int id);
}
public static interface NameFiled {
MajorFiled setNmae(String name);
}
public static interface MajorFiled {
MobileNumber setMajor(String major);
}
public static interface MobileNumber {
BuildStep setMobile(String mobile);
}
public static interface BuildStep {
BuildStep setSalary(double salary);
Student build();
}
private static class Steps implements IdFiled, NameFiled, MajorFiled, MobileNumber, BuildStep {
private int id;
private String name;
private String major;
private String mobileNumber;
private double salary;
@Override
public NameFiled setId(int id) {
this.id = id;
return this;
}
@Override
public MajorFiled setNmae(String name) {
this.name = name;
return this;
}
@Override
public MobileNumber setMajor(String major) {
this.major = major;
return this;
}
@Override
public BuildStep setSalary(double salary) {
this.salary = salary;
return this;
}
@Override
public BuildStep setMobile(String mobile) {
this.mobileNumber = mobile;
return this;
}
@Override
public Student build() {
if (id == 0) {
throw new NullPointerException("ID Can't be 0");
}
if (name == null) {
throw new NullPointerException("Name can't be null");
}
if (major == null) {
throw new NullPointerException("Major can't be null");
}
if (mobileNumber == null) {
throw new NullPointerException("Mbile Number can't be null");
}
Student student = new Student(id, name, major, mobileNumber);
student.setSalary(salary);
return student;
}
}
}
사용법 StudentStepBuilder:
스텝 빌더 디자인 패턴의 결과
GitHub 리포지토리의 모든 코드: link
드디어
이것은 나를위한 첫 번째 기사입니다. 당신이 그것을 읽을 때 나는 행복을 기원합니다.
중간:
고급 빌더 디자인 패턴 — Java - Kareem Radwam - Medium
Kareem Radwam ・ 2020년 2월 28일 ・ 4분 읽기
중간
Reference
이 문제에 관하여(고급 빌더 디자인 패턴 — Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kareemradwan/advance-builder-design-pattern-java-3pab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
private int id;
private String name;
private String major;
private String mobileNumber;
private double salary;
public SimpleStudentBuilder() {
}
public SimpleStudentBuilder setId(int id) {
this.id = id;
return this;
}
public SimpleStudentBuilder setName(String name) {
this.name = name;
return this;
}
public SimpleStudentBuilder setMajor(String major) {
this.major = major;
return this;
}
public SimpleStudentBuilder setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
return this;
}
public SimpleStudentBuilder setSalary(double salary) {
this.salary = salary;
return this;
}
public Student build() {
// TODO : Check All Require Parameters is not null
if (id == 0)
throw new NullPointerException("Id Can't be with out value");
if (name == null)
throw new NullPointerException("Name Can't be Null");
if (major == null)
throw new NullPointerException("Major Can't be Null");
if (mobileNumber == null)
throw new NullPointerException("Number Can't be Null");
Student student = new Student(id, name, major, mobileNumber);
student.salary = salary;
return student;
}
공개 정적 무효 메인(문자열[] 인수) {
Student student = new Student.SimpleStudentBuilder()
.setMajor("IT")
.setName("Kareem Radwa")
.setMobileNumber("0597190510")
.setSalary(1000)
.setId(32)
.build();
}딥 인 빌더 디자인 패턴 :)
Student Constructor에서 예를 들어 [ id, name, major, mobile number ] 순서로 매개 변수 값을 전달하는 데 우선 순위가 있다고 가정합니다. 이 배열이 사라지면 Class Student에서 개체를 만들 수 없습니다.
그래서 우리는 이 상황에 대한 답이 필요합니다. 답은 Step Builder이지만 이 답을 어떻게 구현할 수 있습니까? 계속 읽으세요 :)
스텝 빌더 디자인 패턴:
이 아이디어를 적용하려면 다음이 필요합니다.
동일한 수의 Require 변수가 있는 많은 인터페이스가 있으므로 우리의 학생 클래스 예제에서는 4개의 인터페이스가 필요하고 추가로 Build Method 및 선택적 변수에 대한 인터페이스가 하나 더 필요합니다.
클래스는 위의 모든 인터페이스를 구현합니다. 이 '단계'에는 캡션이 필요합니다.
사용법 StudentStepBuilder에 대한 설명:
빌더의 이 접근 방식을 사용해야 하는 경우 처음에만 ID 설정 방법을 표시해야 하며 사용자가 이를 입력하면 그 후에 이름 변수 값 등을 설정할 수 있습니다.
코딩 시간:
공개 클래스 StudentStepBuilder {
public static IdFiled newBuilder() {
return new Steps();
}
public static interface IdFiled {
NameFiled setId(int id);
}
public static interface NameFiled {
MajorFiled setNmae(String name);
}
public static interface MajorFiled {
MobileNumber setMajor(String major);
}
public static interface MobileNumber {
BuildStep setMobile(String mobile);
}
public static interface BuildStep {
BuildStep setSalary(double salary);
Student build();
}
private static class Steps implements IdFiled, NameFiled, MajorFiled, MobileNumber, BuildStep {
private int id;
private String name;
private String major;
private String mobileNumber;
private double salary;
@Override
public NameFiled setId(int id) {
this.id = id;
return this;
}
@Override
public MajorFiled setNmae(String name) {
this.name = name;
return this;
}
@Override
public MobileNumber setMajor(String major) {
this.major = major;
return this;
}
@Override
public BuildStep setSalary(double salary) {
this.salary = salary;
return this;
}
@Override
public BuildStep setMobile(String mobile) {
this.mobileNumber = mobile;
return this;
}
@Override
public Student build() {
if (id == 0) {
throw new NullPointerException("ID Can't be 0");
}
if (name == null) {
throw new NullPointerException("Name can't be null");
}
if (major == null) {
throw new NullPointerException("Major can't be null");
}
if (mobileNumber == null) {
throw new NullPointerException("Mbile Number can't be null");
}
Student student = new Student(id, name, major, mobileNumber);
student.setSalary(salary);
return student;
}
}
}
사용법 StudentStepBuilder:
스텝 빌더 디자인 패턴의 결과
GitHub 리포지토리의 모든 코드: link
드디어
이것은 나를위한 첫 번째 기사입니다. 당신이 그것을 읽을 때 나는 행복을 기원합니다.
중간:
고급 빌더 디자인 패턴 — Java - Kareem Radwam - Medium
Kareem Radwam ・ 2020년 2월 28일 ・ 4분 읽기
중간
Reference
이 문제에 관하여(고급 빌더 디자인 패턴 — Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kareemradwan/advance-builder-design-pattern-java-3pab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 아이디어를 적용하려면 다음이 필요합니다.
동일한 수의 Require 변수가 있는 많은 인터페이스가 있으므로 우리의 학생 클래스 예제에서는 4개의 인터페이스가 필요하고 추가로 Build Method 및 선택적 변수에 대한 인터페이스가 하나 더 필요합니다.
클래스는 위의 모든 인터페이스를 구현합니다. 이 '단계'에는 캡션이 필요합니다.
사용법 StudentStepBuilder에 대한 설명:
빌더의 이 접근 방식을 사용해야 하는 경우 처음에만 ID 설정 방법을 표시해야 하며 사용자가 이를 입력하면 그 후에 이름 변수 값 등을 설정할 수 있습니다.
코딩 시간:
공개 클래스 StudentStepBuilder {
public static IdFiled newBuilder() {
return new Steps();
}
public static interface IdFiled {
NameFiled setId(int id);
}
public static interface NameFiled {
MajorFiled setNmae(String name);
}
public static interface MajorFiled {
MobileNumber setMajor(String major);
}
public static interface MobileNumber {
BuildStep setMobile(String mobile);
}
public static interface BuildStep {
BuildStep setSalary(double salary);
Student build();
}
private static class Steps implements IdFiled, NameFiled, MajorFiled, MobileNumber, BuildStep {
private int id;
private String name;
private String major;
private String mobileNumber;
private double salary;
@Override
public NameFiled setId(int id) {
this.id = id;
return this;
}
@Override
public MajorFiled setNmae(String name) {
this.name = name;
return this;
}
@Override
public MobileNumber setMajor(String major) {
this.major = major;
return this;
}
@Override
public BuildStep setSalary(double salary) {
this.salary = salary;
return this;
}
@Override
public BuildStep setMobile(String mobile) {
this.mobileNumber = mobile;
return this;
}
@Override
public Student build() {
if (id == 0) {
throw new NullPointerException("ID Can't be 0");
}
if (name == null) {
throw new NullPointerException("Name can't be null");
}
if (major == null) {
throw new NullPointerException("Major can't be null");
}
if (mobileNumber == null) {
throw new NullPointerException("Mbile Number can't be null");
}
Student student = new Student(id, name, major, mobileNumber);
student.setSalary(salary);
return student;
}
}
}
사용법 StudentStepBuilder:
스텝 빌더 디자인 패턴의 결과
GitHub 리포지토리의 모든 코드: link
드디어
이것은 나를위한 첫 번째 기사입니다. 당신이 그것을 읽을 때 나는 행복을 기원합니다.
중간:
고급 빌더 디자인 패턴 — Java - Kareem Radwam - Medium
Kareem Radwam ・ 2020년 2월 28일 ・ 4분 읽기
중간
Reference
이 문제에 관하여(고급 빌더 디자인 패턴 — Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kareemradwan/advance-builder-design-pattern-java-3pab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
공개 클래스 StudentStepBuilder {
public static IdFiled newBuilder() {
return new Steps();
}
public static interface IdFiled {
NameFiled setId(int id);
}
public static interface NameFiled {
MajorFiled setNmae(String name);
}
public static interface MajorFiled {
MobileNumber setMajor(String major);
}
public static interface MobileNumber {
BuildStep setMobile(String mobile);
}
public static interface BuildStep {
BuildStep setSalary(double salary);
Student build();
}
private static class Steps implements IdFiled, NameFiled, MajorFiled, MobileNumber, BuildStep {
private int id;
private String name;
private String major;
private String mobileNumber;
private double salary;
@Override
public NameFiled setId(int id) {
this.id = id;
return this;
}
@Override
public MajorFiled setNmae(String name) {
this.name = name;
return this;
}
@Override
public MobileNumber setMajor(String major) {
this.major = major;
return this;
}
@Override
public BuildStep setSalary(double salary) {
this.salary = salary;
return this;
}
@Override
public BuildStep setMobile(String mobile) {
this.mobileNumber = mobile;
return this;
}
@Override
public Student build() {
if (id == 0) {
throw new NullPointerException("ID Can't be 0");
}
if (name == null) {
throw new NullPointerException("Name can't be null");
}
if (major == null) {
throw new NullPointerException("Major can't be null");
}
if (mobileNumber == null) {
throw new NullPointerException("Mbile Number can't be null");
}
Student student = new Student(id, name, major, mobileNumber);
student.setSalary(salary);
return student;
}
}
}사용법 StudentStepBuilder:
스텝 빌더 디자인 패턴의 결과
GitHub 리포지토리의 모든 코드: link
드디어
이것은 나를위한 첫 번째 기사입니다. 당신이 그것을 읽을 때 나는 행복을 기원합니다.
중간:
고급 빌더 디자인 패턴 — Java - Kareem Radwam - Medium
Kareem Radwam ・ 2020년 2월 28일 ・ 4분 읽기
중간
Reference
이 문제에 관하여(고급 빌더 디자인 패턴 — Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kareemradwan/advance-builder-design-pattern-java-3pab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이것은 나를위한 첫 번째 기사입니다. 당신이 그것을 읽을 때 나는 행복을 기원합니다.
중간:
고급 빌더 디자인 패턴 — Java - Kareem Radwam - Medium
Kareem Radwam ・ 2020년 2월 28일 ・ 4분 읽기
중간
Reference
이 문제에 관하여(고급 빌더 디자인 패턴 — Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kareemradwan/advance-builder-design-pattern-java-3pab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
고급 빌더 디자인 패턴 — Java - Kareem Radwam - Medium
Kareem Radwam ・ 2020년 2월 28일 ・ 4분 읽기 중간
Reference
이 문제에 관하여(고급 빌더 디자인 패턴 — Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kareemradwan/advance-builder-design-pattern-java-3pab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)