設計模式 builder模式

2021-08-26 12:07:32 字數 2656 閱讀 6712

builder表示建立,用於建立物件。
name

category

intent

builder

creational

提供簡便的方式建立乙個複雜類物件,該類可能需要有許多屬性,但是並不是每個屬性都是必須的。同時,建立後的物件一般不改變

建立複雜類物件。該物件由很多個屬性構成,但是並不是每個屬性都是必須的,或者是有預設

值的。同時,建立後的物件一般不改變其屬性值。

在類的建構函式中,如果該類有很多屬性,你需要有乙個包含了所有屬性的構造方法。同時為

了使用方便,你需要暴露很多只有幾個屬性的建構函式,剩下的屬性設定預設值。比如說打

遊戲時建立英雄,英雄有職業,髮型,服裝,性別,**等,你的建構函式可能是這樣子的:

hero(profession p, haircolor hc, hairtype ht, cloth c, gender g, weapon w)

hero(haircolor hc, hairtype ht, cloth c, weapon w)

......

這就導致建構函式太多 ,客戶端根本記不住。這就是人們所說的"telescoping constructor anti-pattern",

可伸縮構造器的反模式。這個翻譯不太好理解,就簡單理解為建構函式又多又臭。除了上面所說的問題外,

如果類需要加乙個屬性,則你的建構函式又需要加很多個。不利於擴充套件。

下面**模擬的是乙個英雄的建立過程。

package com.liang.designpattern.builder;

public

enum haircolor

}

package com.liang.designpattern.builder;

public

enum hairtype

@override

public string tostring()

}

package com.liang.designpattern.builder;

public

enum profession

}

package com.liang.designpattern.builder;

public

enum weapon

}

package com.liang.designpattern.builder;

public

enum armor

@override

public string tostring()

}

package com.liang.designpattern.builder;

/** *

* hero, the class with many parameters.

* */

public

final

class

hero

public profession getprofession()

public string getname()

public hairtype gethairtype()

public haircolor gethaircolor()

public armor getarmor()

public weapon getweapon()

/***

* the builder class.

* */

public

static

class

builder

this.profession = profession;

this.name = name;

}public builder withhairtype(hairtype hairtype)

public builder withhaircolor(haircolor haircolor)

public builder witharmor(armor armor)

public builder withweapon(weapon weapon)

public hero build()

}}

package com

.liang

.designpattern

.builder

;public class buildertest

}

mongoclientoptions.builder, 這是mongo連線的乙個類,用於建立mongoclientoptions,改類儲存了連線mongo時所需要的屬性,所有屬性都是final。

hystrixcommand.setter, 這是hystrix用到的用於設定熔斷時所需要的引數,並利用setter生成hystrixcommand。這裡面有大量builder模式的使用。

設計模式 Builder模式

bulder模式是一步步建立乙個複雜物件的建立模型,它允許使用者在不知道內部構建細節 的情況下可以更精細地控制物件的構造流程該模式為將構建複雜物件的過程和它的部件 解耦,使得構建過程和部件的表示隔離開來。將乙個負責物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 3.1 相同的方法,不...

設計模式 Builder模式

網路上有人將它定義為 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的物件。所以建造者模式適合於乙個具有較多的零件 屬性 的產品 物件 的建立過程。由五個部分構成 1.product concreatebuilder建立該產品的內部表示並定義它的裝配過程。2.builder介面 ...

設計模式 Builder模式

一貫風格,直接上 package created by mingchenchen on 2017 6 14.public class user public void setid string id public string getcountry public void setcountry st...