設計模式(四)學習了構建器模式,就能讓你更加方便地創建對象

一、什麼是構建器模式

1.概念

構建器(Builder)模式,有的也叫建造者模式。
構建器模式的設計是爲了能夠讓對象的創建更加方便,一般是會設計兩個類,一個類是目標類,也就是我們需要的類;另一個類就是構建器類,它是爲了我們創建目標類時更加的方便。

2.構建器模式的使用場景

  1. 目標類的屬性過多。當我們需要設置參數時,就需要一個一個去set,或者重載構造方法,第一個方法就會讓編寫的代碼十分繁瑣;第二個方法就難以重載自己想要的構造方法。
  2. 目標類的屬性結構複雜。如果我們每次使用目標類時,都要手動的去設置屬性,還要關心它們的內部結構,那麼使用目標類的體驗感是很差的。

3.優點

  1. 擴展性高
  2. 使用方便

4.缺點

  1. 需要創建構建器類
  2. 依賴性高。一旦目標類改變,構建器也需要改變。

二、簡單的構建器模式實現

1.代碼

User

package build;

/**
 * @author xxj
 * 用戶
 */
public class User {
    private String name;
    private int age;
    private String sex;
    public User() {
    }
    public User(UserBuild build) {
        this.age=build.age;
        this.name=build.name;
        this.sex=build.sex;
    }
     @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

UserBuild

package build;

/**
 * @author xxj
 * 用戶構建器
 */
public class UserBuild {
    public String name;
    public int age;
    public String sex;
    public UserBuild(){}
    public UserBuild name(String name){
        this.name=name;
        return this;
    }
    public UserBuild age(int age){
        this.age=age;
        return this;
    }
    public UserBuild sex(String sex){
        this.sex=sex;
        return this;
    }
    public User build(){
        return new User(this);
    }
}

2.使用

package test;

import build.User;
import build.UserBuild;

public class test {
    public static void main(String[] args){
        UserBuild build=new UserBuild();
        build.name("xiaoming").age(18).sex("男");
        User user=new User(build);
        System.out.println(user.toString());
    }
}

結果
在這裏插入圖片描述

3.注意

  1. 構建器的創建時,需要注意,它的方法返回的是this
  2. 構建器還可以給屬性設置默認值,這樣可以省去很多默認參數的設置。

三、總結

構建器模式的設計思想就是能夠更加便捷地創建一個對象,從上面的例子也可以看出,當屬性較少時,沒有必要創建一個構建器,但是我舉這個例子想表達就是這個想法:創建一個構建器來構建一個對象。
當屬性越來越複雜時,構建器的作用就會體現出來了。

——————————————————————————————
如果本文章內容有問題,請直接評論或者私信我。
未經允許,不得轉載!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章