當乙個物件有很多屬性,對屬性賦值時,有兩種方式,一種是set,一種是建構函式。 通過建構函式的話,屬性越多,建構函式不同的場景下需要不同的引數,也就可能會有越多。這個時候,通過建造者模式會比較方面,不同的物件需要不同的屬性,只對需要的屬性賦值即可。
實現建造者模式的方式有很多種。在此介紹其中兩種。
第一種:通用生成器+主管方式
實現步驟:
1、建立通用生成器介面,介面中宣告物件屬性賦值的方法。
2、建立具體物件類
3、建立具體物件生成器類,實現通用生成器介面。
3.1 在類中,宣告屬性,並實現介面方法進行賦值屬性。
3.2 在類中,建立個public方法用來生成具體的物件,返回型別就是要例項化的物件類,這個方法通過呼叫物件類的建構函式來實現例項化並返回。
4、建立主管類,在主管類中建立生成物件的方法,方法引數是通用生成器介面物件,方法內容就是呼叫通用生成器介面裡的方法進行賦值。
5、建立測試類,測試類中,例項化主管類①,例項化具體物件生成器類②, 呼叫主管類中的建立生成物件方法,把②作為引數傳入。 具體物件的例項化物件,是②呼叫3.2的方法來建立的。
優點:缺點:由於該模式需要新增多個類, 因此**整體複雜程度會有所增加
示例**:
/**
*用生成器介面
*/public inte***ce builder
/***汽車物件生成器類
*/public class carbuilder implements builder
@override
public void setseats(int seats)
public car getresult()
}/**
*汽車物件
*/public class car
public string gettype()
public int getseats()
}/**
*主管,控制著構造順序
*/public class director
public void constructsuv(builder builder)
}/**
*測試執行類
*/public class demo
}
第二種:自構建方式(暫且叫這個吧)
實現步驟:
1、建立物件類,宣告屬性。在類中建立靜態內部生成器類。
2、內部生成器類中,宣告跟物件一樣的屬性。建立給屬性賦值的方法,但是方法的返回型別不是void,而是內部生成器類本身,方法返回this,意思是誰呼叫這個方法就返回誰。
3、內部生成器類中建立public方法,返回型別為物件類,在這個方法中進行例項化物件類。
4、在物件類中,宣告有參的私有建構函式,引數是內部生成器類。並把生成器類物件的屬性賦值給物件類中的屬性。
示例**:
public class user
public userbuilder setage(int age)
public userbuilder set***(string ***)
public user build()
}private user(userbuilder userbuilder)
public string tostring() ';
}}public class testuser
}
第二種方式的實現步驟其實還有一種實現方式。就是不使用內部類的方式,直接修改物件類本身的屬性賦值方法,返回型別是物件類本身。
示例**:
public class userself
public userself setage(int age)
public userself set***(string ***)
public userself build()
public string tostring() ';
}}public class testuserself
}
Builder 建造者模式
模式定義 builder模式很好地將乙個複雜物件的建立與該物件內部的各個部件的組裝分離開來。它和 abstract factory模式有相似的地方,但是abstract factory主要提供了乙個建立一些列相關或相互依賴的物件的介面,無需知道指定他們具體的類 生產者 而builder模式著重於部件...
建造者模式(Builder)
工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 還和前面一樣,乙個sender介面,兩個實現類mailsender和smssende...
建造者模式(Builder)
4 建造者模式 builder 工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 建造者類如下 抽象產品類,使用了模板方法模式,不同產...