자바 빌 더 모델 실현 원리 및 장단 점 분석
건설 자 모델 에서 다음 과 같은 네 가지 역할 이 있다.
Product:제품 캐릭터Builder:추상 적 인 건축 자,제품 인터페이스 정의
홈 웨 어
홈 웨 어 는 양장 이 든 간 장 이 든 절차 가 상대 적 으로 고정 되 어 있 기 때문에 건설 자 모델 에 적용 된다.우 리 는 가정 복 을 예 로 들 어 건축 자 모델 을 알 아 보 는 것 을 배 웠 다.다음 그림 은 홈 메 이 크 업 모델 이 간단 한 UML 그림 입 니 다.
1.홈 웨 어 대상 클래스
/**
*
*/
public class House {
//
private String jiadian;
//
private String diban;
//
private String youqi;
public String getJiadian() {
return jiadian;
}
public void setJiadian(String jiadian) {
this.jiadian = jiadian;
}
public String getDiban() {
return diban;
}
public void setDiban(String diban) {
this.diban = diban;
}
public String getYouqi() {
return youqi;
}
public void setYouqi(String youqi) {
this.youqi = youqi;
}
@Override
public String toString() {
return "House{" +
"jiadian='" + jiadian + '\'' +
", diban='" + diban + '\'' +
", youqi='" + youqi + '\'' +
'}';
}
}
2.추상 적 인 건축 자 Builder 류
/**
*
*/
public interface HouseBuilder {
//
void doJiadian();
//
void doDiBan();
//
void doYouqi();
House getHouse();
}
3.구체 적 인 건축 자-간이 포장 건축 자 류
/**
*
*/
public class JianzhuangBuilder implements HouseBuilder {
private House house = new House();
@Override
public void doJiadian() {
house.setJiadian(" ");
}
@Override
public void doDiBan() {
house.setDiban(" ");
}
@Override
public void doYouqi() {
house.setYouqi(" ");
}
@Override
public House getHouse() {
return house;
}
}
4.구체 적 인 건축 자-양장 건축 자 류
/**
*
*/
public class jingzhuangBuilder implements HouseBuilder {
private House house = new House();
@Override
public void doJiadian() {
house.setJiadian(" , ");
}
@Override
public void doDiBan() {
house.setDiban(" , ");
}
@Override
public void doYouqi() {
house.setYouqi(" , 0 ");
}
@Override
public House getHouse() {
return house;
}
}
5.지휘관-홈 웨 어 회사 류
/**
* ,
*/
public class HouseDirector {
public House builder(HouseBuilder houseBuilder){
houseBuilder.doDiBan();
houseBuilder.doJiadian();
houseBuilder.doYouqi();
return houseBuilder.getHouse();
}
}
6.테스트
public class App {
public static void main(String[] args) {
house();
}
public static void house(){
HouseDirector houseDirector = new HouseDirector();
//
JianzhuangBuilder jianzhuangBuilder = new JianzhuangBuilder();
System.out.println(" ");
System.out.println(houseDirector.builder(jianzhuangBuilder));
//
jingzhuangBuilder jingzhuangBuilder = new jingzhuangBuilder();
System.out.println(" ");
System.out.println(houseDirector.builder(jingzhuangBuilder));
}
}
출력 결과우 리 는 가정 복 을 예 로 들 어 두 개의 구체 적 인 건축 자,한 개의 간단 한 건축 자,한 개의 양장 건축 자 를 실현 했다.우 리 는 단지 가정 복 회사 에 내 가 간단 한 옷 이 필요 한 지,아니면 양장 이 필요 한 지 알려 줄 필요 가 있다.그 는 우 리 를 도와 안배 할 것 이다.나 는 안의 구체 적 인 세부 사항 을 알 필요 가 없다.어 때?건설 자 모델 배 웠 어?
대상 구축
일상적인 개발 에서 당신 은 아래 의 코드 를 자주 볼 수 있 습 니까?
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.curry.springbootswagger.controller"))
.paths(PathSelectors.any())
.build();
너무 아름 답지 않 아 요?Builder 모드 를 배 운 후에 도 이런 방식 으로 대상 구축 을 할 수 있 습 니 다.그것 은 변종 Builder 모드 를 통 해 이 루어 졌 다.먼저 설명 하지 않 겠 습 니 다.우 리 는 먼저 Builder 모델 로 상기 대상 과 의 구축 을 실현 하고 학생 류 를 예 로 들 겠 습 니 다.학생 대상 코드:
public class Student {
private String name;
private int age;
private int num;
private String email;
// builder
public static Student.Builder builder() {
return new Student.Builder();
}
// builder 。
public static class Builder{
private String name;
private int age;
private int num;
private String email;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder num(int num) {
this.num = num;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public Student build() {
// builder
return new Student(this);
}
}
//
private Student(Builder builder) {
name = builder.name;
age = builder.age;
num = builder.num;
email = builder.email;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", num=" + num +
", email='" + email + '\'' +
'}';
}
}
호출 코드:
public static void student(){
Student student = Student.builder().name(" ").num(1).age(18).email(" @163.com").build();
System.out.println(student);
}
이 를 통 해 알 수 있 듯 이 변종 Builder 모드 는 다음 과 같은 내용 을 포함한다.건설 자 모델 의 장단 점
장점.
4.567917.건설 자 모델 에서 클 라 이언 트 는 제품 내부 로 구 성 된 세부 사항 을 알 필요 가 없고 제품 자체 와 제품 의 생 성 과정 을 결합 시 켜 같은 생 성 과정 에서 서로 다른 제품 대상 을 만 들 수 있다.
4.567917.모든 구체 적 인 건축 자 는 상대 적 으로 독립 되 고 다른 구체 적 인 건축 자 와 무관 하기 때문에 구체 적 인 건축 자 를 편리 하 게 교체 하거나 새로운 구체 적 인 건축 자 를 추가 할 수 있다.사용자 가 서로 다른 구체 적 인 건축 자 를 사용 하면 서로 다른 제품 대상 을 얻 을 수 있다.
4.567917.제품 의 생 성 과정 을 더욱 세밀 하 게 통제 할 수 있다.복잡 한 제품 의 생 성 절 차 를 서로 다른 방법 으로 분해 하여 생 성 과정 을 더욱 명확 하 게 하고 프로그램 을 사용 하여 생 성 과정 을 제어 하 는 데 편리 하 다.
4.567917.새로운 구체 적 인 건설 자 를 추가 할 때 기 존의 라 이브 러 리 코드 를 수정 할 필요 가 없다.지휘자 류 는 추상 적 인 건설 자 류 에 대한 프로 그래 밍 으로 시스템 확장 이 편리 하고'개폐 원칙'에 부합된다결점.
4.567917.건설 자 모델 이 만 든 제품 은 비교적 많은 공통점 을 가지 는데 그 구성 부분 이 비슷 하 다.만약 에 제품 간 의 차이 가 크 면 건설 자 모델 을 사용 하기에 적합 하지 않 기 때문에 그 사용 범 위 는 일정한 제한 을 받는다.
4.567917.만약 에 제품 의 내부 변화 가 복잡 하면 구체 적 인 건축 자 류 를 정의 하여 이런 변 화 를 실현 해 야 하기 때문에 시스템 이 매우 커 질 수 있다이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.