使用建立物件時,需要對建立例項物件的屬性進行校驗,屬性之間有一定關聯;或者需要建立的必要引數比較多,直接寫在建構函式比較難看,而直接用set又無法保證能確確實實被例項化。
例: 需要定義乙個執行緒池,執行緒池包括以下配置屬性:執行緒池大小、執行緒池最大空閒例項、執行緒池最小空閒例項
這幾個屬性之間存在關係。執行緒池大小 >=執行緒池最大空閒例項; 執行緒池最大空閒例項》=執行緒池最小空閒例項
一般寫法
public
class
threadpool
if(maxidle < minidle)
this
.maxtotal = maxtotal;
this
.maxidle = maxidle;
this
.minidle = minidle;
}}
建造者模式寫法
public
class
threadpool
public
static
class
builder
if(maxidle < minidle)
return
newthreadpool
(this);
}public
intgetmaxtotal()
public builder setmaxtotal
(int maxtotal)
public
intgetmaxidle()
public builder setmaxidle
(int maxidle)
public
intgetminidle()
public builder setminidle
(int minidle)
}}
使用
threadpool threadpool =
newthreadpool.builder()
.setmaxtotal(10
).setmaxidle(8
).setminidle(4
).build()
;
優點:
可以優雅處理例項化類時各種類屬性的關係,和引數的校驗過程
缺點:類內類builder 需要定義的實際類(threadpool)差不的屬性結構,有較多的重複**
建造者模式(建立型)
建造者模式 builder pattern 又稱生成器模式 將乙個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。這個 builder,其實和模板模式非常的像,但是也有區別,那就是在模板模式中父類對子類中的實現進行操作,在父類之中進行一件事情的處理,但是在 builder 模式之中,...
建立型設計模式 建造者模式
建造者模式的結構 產品角色 抽象建造者 具體建造者 指揮者。相比抽象工廠模式,省掉了抽象產品,多了指揮者。產品class product 抽象建造者 abstract class builder 具體建造者 public class concretebuilder extends builder p...
設計模式 建立型 建造者模式
生產乙個遊戲玩家,遊戲玩家由臉 身體 腿 胳膊組成,組裝時有順序要求 from abc import abcmeta,abstractmethod 產品 class player def init self,face none body none arm none leg none self.fac...