生成器模式也叫建造者模式,一般是用來構造複雜物件的一種模式。client(客戶)-director(指導者)-builder(構造者)-product(產品)。
生成器模式能幫助構建設計部件與表現的各種組合的物件。否則知道構建物件所有細節的director可能會變成乙個龐大的「神」類。但是在做應用的時候一般不會遇到如此複雜的類(請求?),只有在做遊戲時,構造涉及各種特徵的角色的時候,應該好好使用該模式。
例子:乙個追逐遊戲,假定有兩個角色,敵人和遊戲者。這兩個角色有一些基本trait,如力量strength、耐力stamina、智力intelligence、敏捷agility、攻擊力aggressiveness。每一項特徵都影響角色的防禦protection和攻擊power能力。
類:(1)character
方法:init
屬性:strength,stamina,intelligence,agility,aggressiveness,protection,power
character實際並不知道如何將自己構建成有意義的角色。所以需要characterbuilder來基於各個特徵的關係,構建有意義的角色。
(2)characterbuilder 抽象基類
方法:建立character例項,根據strength,stamina,intelligence,agility,aggressiveness構建character例項的protection和power。
引用:character
(3)standardcharacterbuilder 具體類
方法:過載抽象基類,按照比例關係設定正在構建的角色的防禦和攻擊值。
(4)chasinggame
方法:- (character *)createplayer:(characterbuilder *)builder; - (character *)createenemy:(characterbuilder *)builder;
(5)客戶端**
(構造者)characterbuilder *characterbuilder =[[standardcharacterbuilder alloc]init];
(指導者)chasinggame *game = [[chasinggame alloc]init];也可以通過characterbuilder來建立game,這樣下面兩個方法就直接是[game createplayer]和[game createenemy]
(產品玩家)character *player = [game createplayer:characterbuilder];
(產品敵人)character *enemy = [game createenemy:characterbuilder];
生成器與抽象工廠模式的對比:
生成器:構建複雜物件;以多個步驟構建物件;以多種方式構建物件;在構建過程的最後一步返回產品;專注乙個特定產品;
抽象工廠:構建簡單或複雜物件;以單一步驟構建物件;以單一方式構建物件;立刻返回產品;強調一套產品;
OC程式設計之道 建立物件之單例模式
一 何為單例singleton模式?what 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。二 何時使用單例模式?where 1類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其訪問,比如工廠方法。2這個唯一例項只能通過子類化進行擴充套件,而且擴充套件的物件不會破壞客戶端 為什麼不用靜態...
Builder(生成器) 物件建立型模式
將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。使得生成器可以隱藏這個產品的表示和內部結構。同時也隱藏了該產品是如何裝配的。因為產品是通過抽象介面構造的,在改變該產品的內部表示時所要做的只是定義乙個新的生成器。將構造 和表示 分開,builder模式通過封裝乙個複雜物件的建...
非同步程式設計之同步非同步生成器函式
繼續 dart 非同步程式設計系列的最後一篇生成器函式。生成器函式可能比較陌生,在平時開發中使用的不是特別頻繁,但是因為它也是 dart 非同步程式設計的不可缺少的一部分,所以這裡還是展開講解分析,力求做到 dart 非同步程式設計系列文章更完整和全面。生成器函式是一種用於延遲生成值序列的函式,並且...