Builder模式是一種一步一步創(chuàng)建一個復雜對象的設計模式殖演,我認為這種設計模式的精髓就主要有兩點:其一壹堰,用戶使用簡單隙赁,并且可以在不需要知道內部構建細節(jié)的情況下杖狼,就可以構建出復雜的對象模型;其二猿挚,對于設計者來說咐旧,這是一個解耦的過程,這種設計模式可以將構建的過程和具體的表示分離開來亭饵。
package BuilderPattern;
public class Student {
private int stuNum ;
? ? private String name ;
? ? private int age ;
? ? private String address ;
? ? private boolean girlfriend ;
? ? private Student(){}//定義私有構造器休偶,只能在類內部使用(提供給靜態(tài)內部類創(chuàng)建一個對象)
???? // 定義私有的有參構造器 ,即給對象的屬性賦值,由靜態(tài)內部類調用
? ? private Student(int stuNum,String name,int age,String address,boolean girlfriend){
? ? ? ? this.stuNum = stuNum ;
? ? ? ? this.name = name ;
? ? ? ? this.age = age ;
? ? ? ? this.address = address ;
? ? ? ? this.girlfriend = girlfriend ;
? ? }
?? public int getStuNum() {
????? ???? return stuNum;
? ? }
??? public void setStuNum(int stuNum) {
??????????? this.stuNum = stuNum;
? ? }
??? public StringgetName() {
??????????? return name;
? ? }
??? public void setName(String name) {
??????????? this.name = name;
? ? }
??? public int getAge() {
??????????? return age;
? ? }
?? public void setAge(int age) {
??????? this.age = age;
? ? }
?? public StringgetAddress() {
????????? return address;
? ? }
?? public void setAddress(String address) {
????????? this.address = address;
? ? }
?? public boolean isGirlfriend() {
?????????? return girlfriend;
? ? }
??? public void setGirlfriend(boolean girlfriend) {
?????????? this.girlfriend = girlfriend;
? ? }
??? public static class Builder{//靜態(tài)內部類辜羊,通過該類來創(chuàng)建一個外部類對象踏兜,使用鏈式調用
? ? ? ??? private Studentstudent ;//創(chuàng)建一個外部類對象
????????? //構造一個內部類對象,通過該對象設置屬性值
????????? //如果存在必填參數八秃,可以以帶參構造函數的方式傳過來
? ? ? ??? public Builder(int stuNum,String name,int age,String address,boolean girlfriend){
?????????????????? student =new Student(stuNum,name,age,address,girlfriend);
? ? ? ?? }
???????? public Builder(){
???????????? student =new Student();
? ? ? ?? }
???????? public Builder stuNum(int stuNum){
??????????????? student.stuNum = stuNum;
??????????????? return this ;
? ? ? ?? }
??????? public Builder name(String name){
?????????????? student.name = name;
?????????????? return this ;
? ? ? ?? }
??????? public Builder age(int age){
???????????????? student.age = age;
???????????????? return this ;
? ? ? ?? }
???????? public Builder address(String address){
??????????????????? student.address = address;
??????????????????? return this ;
? ? ? ? }
??????? public Builder girlfriend(boolean girlfriend){
????????????????? student.girlfriend = girlfriend;
????????????????? return this ;
? ? ? ? }
??????? public Student build(){
???????????????? return student;
? ? ? ? }
??? }
}
調用:
// 第一種方式
Student student1 =new Student.Builder(1,"老王",36,"隔壁",false)
?????????????????? .build();
//第二種方式
Student student2 =new Student.Builder()
?????????? .stuNum(2)
?????????? .name("小張")
?????????? .age(20)
?????????? .address("上海")
?????????? .girlfriend(true)
?????????? .build();
System.out.println(student1.toString() +" \n" + student2.toString());
輸出:????? 我重寫了toString()
stuNo:1,name:老王,age:36,address:隔壁,grilfriend:false
stuNo:2,name:小張,age:20,address:上海,grilfriend:true