Android 면접 문제 - 디자인 모델 구축 자 모델 Builder 상세 설명 및 코드 demo
6651 단어 [자바 개발 과 디자인 모델]
또한 건설 자 모델 이 라 고도 부 릅 니 다. 복잡 한 대상 의 생 성과 표 시 를 분리 시 켜 같은 구축 과정 에서 서로 다른 표 시 를 만 들 수 있 습 니 다.
이 말 을 어떻게 이해 하지?
예 를 들 어 당신 이 자동 차 를 조립 하려 면 많은 공구 와 부품 이 필요 할 것 입 니 다. 그리고 당신 은 무작정 창고 로 달 려 가 한 방 의 부품 을 마주 하고 있 습 니 다. 당신 은 멍청 하지 않 습 니까? 나 는 어떻게 이 물건 에서 차 를 조립 하 는 데 필요 한 부품 을 찾 아야 합 니까?그리고 지금 조립 모델 이 업그레이드 되 었 습 니 다. 당신 과 도 킹 하 는 오래된 기사 가 있 습 니 다. 당신 은 그 에 게 이 단계 에 어떤 부품 이 필요 한 지 알려 주기 만 하면 다음 단계 에 어떤 부품 이 필요 한 지 알려 주 십시오. 늙 은 기사 가 당신 을 도와 조립 하 러 갑 니 다. 당신 은 창고 안에 얼마나 지저분 한 물건 이 있 는 지 전혀 관심 을 가 질 필요 가 없습니다.이렇게 해서 당신 은 어떤 차 를 조립 하고 싶 습 니까?
이 비 유 는 그다지 적절 하지 않 을 수도 있 지만 이 치 는 분명 할 것 이다.
차 라 는 대상 의 생 성 은 매우 복잡 하 다 고 말 해 야 한다. 그것 은 매우 많은 속성 을 가지 고 있다. 만약 에 구조 방법 을 통 해 인 스 턴 스 를 직접 전달 하면 참 을 수 없 을 것 이다.그러나 당신 이 대외 적 으로 공 개 된 창조 자 역할, 즉 위의 오래된 운전 자 를 사용 하고 어떤 속성 치 를 전달 하고 싶 으 면 그것 을 주 십시오. 당신 이 생각 을 다 할 때 까지 마지막 으로 구축 하면 차 가 나 옵 니 다.
이루어지다
역할.
구축 자 모델 에서 두 가지 역할 이 반드시 존재 해 야 한다. 물론 규범 에 따라 네 가지 역할 이 있 을 것 이다. 우 리 는 여기 서 약술 한다.
코드 없 는 설명 은 모두 깡패 짓 이 었 고, 이어서 코드 를 통 해 시범 을 보 였 다.
코드 데모
지금 [사람] 이라는 대상 이 있 습 니 다. 사람 이 라면 많은 속성 이 있 을 것 입 니 다. 다음 과 같 습 니 다.
public class Person {
private String age;
private String sex;
private String name;
private String weight;
private String height;
private String location;
private String idCard;
private String workType;
private String school;
private String father;
private String mother;
private String favorite;
private String skill;
}
여기 서 예 를 들 어 실제 개발 자가 필요 로 하 는 대상 은 더 많은 속성 이 있 을 수 있 습 니 다. 예 를 들 어 OKHttpClient 대상 입 니 다.만약 에 네가 구조 방법 을 통 해 인삼 을 전달 하 는 형식 이나 setXXX 방법 을 통 해 대상 을 구성 하면 인성 이 없 는 것 이 분명 하 다. 프로그램 원숭이 에 대해 너무 잔인 하고 글 씨 를 쓰 는 것 은 말 할 필요 도 없 이 매우 추 하 다.이 럴 때 는 빌 더 모드 를 사용 해 야 합 니 다.
우리 가 해 야 할 일 은 내부 클래스 Builder 를 추가 하 는 것 입 니 다. 물론 당신 도 하나의 클래스 를 단독으로 쓸 수 있 습 니 다.
public static final class Builder{
private String age;
private String sex;
private String name;
private String weight;
private String height;
private String location;
private String idCard;
private String workType;
private String school;
private String father;
private String mother;
private String favorite;
private String skill;
public Builder() {
//
age = "15";
}
public Builder setAge(String age) {
this.age = age;
return this;
}
public Builder setSex(String sex) {
this.sex = sex;
return this;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setWeight(String weight) {
this.weight = weight;
return this;
}
public Builder setHeight(String height) {
this.height = height;
return this;
}
public Builder setLocation(String location) {
this.location = location;
return this;
}
public Builder setIdCard(String idCard) {
this.idCard = idCard;
return this;
}
public Builder setWorkType(String workType) {
this.workType = workType;
return this;
}
public Builder setSchool(String school) {
this.school = school;
return this;
}
public Builder setFather(String father) {
this.father = father;
return this;
}
public Builder setMother(String mother) {
this.mother = mother;
return this;
}
public Builder setFavorite(String favorite) {
this.favorite = favorite;
return this;
}
public Builder setSkill(String skill) {
this.skill = skill;
return this;
}
public Person build(){
return new Person(this);
}
}
다음은 Person 대상 에 구조 방법 을 추가 하고 Builder 대상 을 받 은 다음 내부 속성 에 값 을 부여 합 니 다.
public Person() {
this(new Builder());
}
public Person(Builder builder) {
age = builder.age;
sex = builder.sex;
name = builder.name;
weight = builder.weight;
height = builder.height;
location = builder.location;
idCard = builder.idCard;
workType = builder.workType;
school = builder.school;
father = builder.father;
mother = builder.mother;
favorite = builder.favorite;
skill = builder.skill;
}
마지막 으로 사용:
Person person = new Person
.Builder()
.setAge("15")
.setName("Jon")
.setSex("1")
.build();
구조 적 방법 에 대한 참조 와 열 을 전달 하 는 set 방법 에 비해 이런 표기 법 은 매우 간결 하지 않 습 니까? 당신 이 전달 하고 싶 은 매개 변 수 는. Builder () 뒤에 추가 하면 됩 니 다.
Android 에서 빌 더 모드 의 사례
AlertDialog
AlertDialog dialog = new AlertDialog
.Builder(this)
.setIcon(R.mipmap.ic_launcher)
.setTitle(" ")
.setPositiveButton()
.setNegativeButton()
.create();
Notification
Notification notification = new Notification
.Builder(this)
.setContentTitle(" ")
.setContentText(" ")
.setSmallIcon(R.mipmap.ic_launcher)
.build();
OKHttp
OkHttpClient client = new OkHttpClient
.Builder()
.readTimeout(5000, TimeUnit.MILLISECONDS)
.writeTimeout(5000,TimeUnit.MILLISECONDS)
.cache(new Cache(new File("cache"), 1024 * 1024 * 10))
.build();
장점.