利用Builder方式創(chuàng)建對象示例代碼
前言
在創(chuàng)建對象需要初始化數(shù)據(jù),數(shù)據(jù)參數(shù)不容易區(qū)別,可傳可不傳的時候,可以考慮使用Builder建造方法創(chuàng)建。每每當看到別人寫的用Bulder方式來調(diào)用,就覺得so cool,那就自己也來用Builder方式創(chuàng)建對象吧。
下面話不多說了,來一起看看詳細的介紹吧
現(xiàn)在要錄入一系列人員的基本信息的示例:
創(chuàng)建Person類
public class Person {
private String name;
private int age;
private float height;
private float weight;
public Person(String name, int age, float height, float weight) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
}
那么創(chuàng)建對象就是這樣,后面參數(shù)不容易看出表示的是什么,可讀性不強
new Person("馮提莫",18,150,43);
new Person("溫婉",17,164,48);
用Builder模式進行改造
創(chuàng)建一個Builder類,屬性和Person類一樣,加上SetXxx()方法
static class Builder{
private String name;
private int age;
private float height;
private float weight;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setHeight(float height) {
this.height = height;
}
public void setWeight(float weight) {
this.weight = weight;
}
}
將Person的構(gòu)造方法改為傳入Builder對象,將Builder對象的屬性值都賦予Person對象
public Person(Builder builder){
this.name = builder.name;
this.age = builder.age;
this.height = builder.height;
this.weight = builder.weight;
}
改造Builder類,關鍵步驟是將各個set方法返回Builder類對象,這樣就能繼續(xù)愉快地連續(xù)調(diào)用set方法了,最后調(diào)用build()創(chuàng)建方法返回Person對象。
static class Builder{
private String name;
private int age;
private float height;
private float weight;
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setHeight(float height) {
this.height = height;
return this;
}
public Builder setWeight(float weight) {
this.weight = weight;
return this;
}
public Person build(){
return new Person(this);
}
}
將各個set方法的返回值類型改為Builder,每次都返回builder對象,這樣才能將set方法實現(xiàn)連續(xù)的鏈式調(diào)用。
build()方法創(chuàng)建一個person對象,會調(diào)用Person的帶參構(gòu)造方法,將builder對象的屬性依次賦予person對象。person中的屬性值就是鏈式調(diào)用set方法的各個值。
使用Builder模式創(chuàng)建Person對象,明顯看出代碼可讀性大大增強。注:Builder創(chuàng)建方式通常是在創(chuàng)建的對象少的情況下使用。
Person person = new Person.Builder()
.setName("莉哥")
.setAge(20)
.setHeight(162)
.setWeight(45)
.build();
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
.NET?實現(xiàn)啟動時重定向程序運行路徑及?Windows?服務運行模式部署的方法
這篇文章主要介紹了.NET?實現(xiàn)啟動時重定向程序運行路徑及?Windows?服務運行模式部署,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09
.NET使用結(jié)構(gòu)體替代類提升性能優(yōu)化的技巧
這篇文章主要介紹了.NET使用結(jié)構(gòu)體替代類提升性能優(yōu)化的技巧,使用結(jié)構(gòu)體替代類有什么好處呢?在什么樣的場景需要使用結(jié)構(gòu)體來替代類呢?今天的文章為大家一一解答,需要的朋友可以參考下2022-05-05

