"""生產乙個遊戲玩家,遊戲玩家由臉、身體、腿、胳膊組成,組裝時有順序要求"""
from abc import abcmeta, abstractmethod
# 產品
class
player
:def
__init__
(self, face=
none
, body=
none
, arm=
none
, leg=
none):
self.face = face
self.body = body
self.arm = arm
self.leg = leg
def__str__
(self)
:return f", , , "
# 抽象建造者
class
playerbuilder
(metaclass=abcmeta)
: @abstractmethod
defbuild_face
(self)
:pass
@abstractmethod
defbuild_body
(self)
:pass
@abstractmethod
defbuild_arm
(self)
:pass
@abstractmethod
defbuild_leg
(self)
:pass
# 具體建造者
class
***girlbuilder
(playerbuilder)
:def
__init__
(self)
: self.player = player(
)def
build_face
(self)
: self.player.face =
"***girl face"
defbuild_body
(self)
: self.player.body =
"***girl body"
defbuild_arm
(self)
: self.player.arm =
"***girl arm"
defbuild_leg
(self)
: self.player.leg =
"***girl leg"
class
monsterbuilder
(playerbuilder)
:def
__init__
(self)
: self.player = player(
)def
build_face
(self)
: self.player.face =
"monster face"
defbuild_body
(self)
: self.player.body =
"monster body"
defbuild_arm
(self)
: self.player.arm =
"monster arm"
defbuild_leg
(self)
: self.player.leg =
"monster leg"
# 指揮者
class
playerdirector
:# 控制組裝順序
defbuild_player
(self, builder)
: builder.build_body(
) builder.build_face(
) builder.build_arm(
) builder.build_leg(
)return builder.player
builder = ***girlbuilder(
)director = playerdirector(
)p = director.build_player(builder)
print
(p)
建立型設計模式 建造者模式
建造者模式的結構 產品角色 抽象建造者 具體建造者 指揮者。相比抽象工廠模式,省掉了抽象產品,多了指揮者。產品class product 抽象建造者 abstract class builder 具體建造者 public class concretebuilder extends builder p...
設計模式 建立型 建造者模式
定義 將乙個複雜的物件的構建與它的表示分離,是的同樣的構建過程可以建立不同的表示。場景初始化乙個物件特別複雜,如使用多個構造方法,或者說有很多引數,並且都有預設值時。一般4個以上引數,考慮使用建造者模式建立物件。為什麼使用建造者 當你要呼叫乙個類的建構函式時,你首先要決定使用哪乙個,然後裡面又是一堆...
建立型設計模式之建造者模式
建造者模式 主要用於將產品修飾的這部分內容抽象化,提供給外部乙個自由定製的修飾渠道,達到自由切換修飾規則但是不用修改舊 的效果。帶有抽象介面的建造者模式主要涉及的物件有 引導者 decorate 產品 抽象建造者介面 builder 定製化的builder。打個比方,我開著一輛拖拉機去石料場運載建築...