python-建造者模式

來源:互聯網
上載者:User

標籤:順序   init   目的   %s   直接   png   ali   相同   yun   

說明:

假如要組裝一台電腦,將主板,CPU,記憶體等組件按照某個穩定的步驟組合,基本過程是不變的,而組成電腦的各個組件卻可以是不同效能的,不同價位,或者是不同版本的,當組成電腦的時只需要選擇不同的組件就可以按照基本相同的過程造出不同配置的電腦。也就是說建造者模式的意圖是將一個複雜物件的構建過程與表示分離,它使用相同的構建步驟作用於不同的子物件以構建出不同表現形式的“複雜物件”。

執行個體:

從訂單的角度構建一個快餐點餐系統

class Burger():    """    主食類,價格名字    """    name=""    price=0.0    def getPrice(self):        return self.price    def setPrice(self,price):        self.price=price    def getName(self):        return self.nameclass cheeseBurger(Burger):    """    乳酪漢堡    """    def __init__(self):        self.name="cheese burger"        self.price=10.0class spicyChickenBurger(Burger):    """    香辣雞漢堡    """    def __init__(self):        self.name="spicy chicken burger"        self.price=15.0class Snack():    """    小食類,價格以及名字    """    name = ""    price = 0.0    type = "SNACK"    def getPrice(self):        return self.price    def setPrice(self, price):        self.price = price    def getName(self):        return self.nameclass chips(Snack):    """    炸薯條    """    def __init__(self):        self.name = "chips"        self.price = 6.0class chickenWings(Snack):    """    雞翅    """    def __init__(self):        self.name = "chicken wings"        self.price = 12.0class Beverage():    """    飲料    """    name = ""    price = 0.0    type = "BEVERAGE"    def getPrice(self):        return self.price    def setPrice(self, price):        self.price = price    def getName(self):        return self.nameclass coke(Beverage):    """    可樂    """    def __init__(self):        self.name = "coke"        self.price = 4.0class milk(Beverage):    """    牛奶    """    def __init__(self):        self.name = "milk"        self.price = 5.0class order():    """    訂單對象,一個訂單中包含一份主食,一份小食,一份飲料    """    burger=""    snack=""    beverage=""    def __init__(self,orderBuilder):        self.burger=orderBuilder.bBurger        self.snack=orderBuilder.bSnack        self.beverage=orderBuilder.bBeverage    def show(self):        print("Burger:%s"%self.burger.getName())        print("Snack:%s"%self.snack.getName())        print("Beverage:%s"%self.beverage.getName())# 建造者class orderBuilder():    """    orderBuilder就是建造者模式中所謂的“建造者”,    將訂單的建造與表示相分離,以達到解耦的目的。    在上面訂單的構建過程中,如果將order直接通過參數定義好(其構建與表示沒有分離),    同時在多處進行訂單產生,此時需要修改訂單內容,    則需要一處處去修改,業務風險也就提高了不少。    """    bBurger=""    bSnack=""    bBeverage=""    def addBurger(self,xBurger):        self.bBurger=xBurger    def addSnack(self,xSnack):        self.bSnack=xSnack    def addBeverage(self,xBeverage):        self.bBeverage=xBeverage    def build(self):        return order(self)# Director類class orderDirector():    """    在建造者模式中,還可以加一個Director類,用以安排已有模組的構造步驟。    對於在建造者中有比較嚴格的順序要求時,該類會有比較大的用處。    """    order_builder=""    def __init__(self,order_builder):        self.order_builder=order_builder    def createOrder(self,burger,snack,beverage):        self.order_builder.addBurger(burger)        self.order_builder.addSnack(snack)        self.order_builder.addBeverage(beverage)        return self.order_builder.build()#情境實現if  __name__=="__main__":    order_builder=orderBuilder()    order_builder.addBurger(spicyChickenBurger())    order_builder.addSnack(chips())    order_builder.addBeverage(milk())    order_1=order_builder.build()    order_1.show()

執行結果:

Burger:spicy chicken burger
Snack:chips
Beverage:milk

優點:

使得產品內部表象可以獨立的變化,使得客戶不必知道產品內部的組成細節。對構建過程更加精細控制,將構建代碼和表示代碼分開。

缺點:

難以應對”分步驟構建演算法“的需求變動。

適用性:

1、需要產生的產品有複雜的內部結構

2、需要產生的產品對象的屬性相互依賴,建造者模式可以強破產生順序。

參考連結:https://yq.aliyun.com/articles/70416?spm=a2c4e.11155435.0.0.495838daVpgS2g

 

python-建造者模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.