設計模式
抽象工廠模式(abstract factory pattern)是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。uml類圖
抽象工廠模式
抽象產品類(abstractproductx):多個系列抽象產品(x=a,b,c...)。
具體產品類(productx):實現基類中的抽象方法(多個不同的具體產品,x=1,2,3..)。
抽象工廠類或介面(abstractfactory):定義具體工廠的多個公共介面(擁有各系列產品建立的介面)。
具體工廠類(factoryx):定義建立各系列具體產品例項的方法。(每個工廠對應一種具體產品,x=1,2,3...)。
與工廠模式的區別
工廠模式的工廠只能生產乙個系列的產品。而抽象工廠模式的工廠可以生產乙個或多個系列的產品。接著上篇【設計模式】工廠模式的話題。工廠模式關注的是乙個系列的不同種產品。而抽象工廠模式關注的是不同系列產品。
場景:玩《英雄聯盟》(5v5 moba端遊)新開一局遊戲,遊戲開始每個玩家需要選乙個英雄之外,還需要選擇天賦,召喚師技能。也就是需要建立三種產品。並且,在不同玩法下,比如召喚師峽谷(自選或排位等)與哭嚎深淵(大亂鬥),建立的產品也略微有所差異,比如大亂鬥下英雄一開始就3級,召喚師技能沒有傳送,有雪球。結構上:
產品(三個系列):英雄,天賦,召喚師技能。
工廠(兩個):召喚師峽谷工廠,哭嚎深淵工廠。
**實現
英雄基類(新增lv
成員變數和print()
方法)
public abstract class hero
}
只考慮一種英雄,比如寒冰射手-艾希。
艾希艾希類:
public class ashe extends hero
// 艾希台詞(不重要)
@override
public void say()
}
召喚師峽谷中的艾希:
public class ashe_xiagu extends ashe
}
哭嚎深淵中的艾希:
public class ashe_shenyuan extends ashe
}
天賦基類:(就簡單點只用列印資訊區分下好了)
public abstract class talent
兩個天賦實現類:
public class talent_xiagu extends talent
}
public class talent_shenyuan extends talent
}
召喚師技能基類:
public abstract class skill
}
兩個召喚師技能實現類:
public class skill_xiagu extends skill ;}}
public class skill_shenyuan extends skill ;}}
準備工作完畢,接下來就是重點了。
抽象工廠類或介面:
public inte***ce abstractfactory
召喚師峽谷工廠類:
public class factory_xiagu implements abstractfactory
public talent createtalent()
public skill createskill()
}
哭嚎深淵工廠類:
public class factory_shenyuan implements abstractfactory
public talent createtalent()
public skill createskill()
}
最後是客戶端**:
public class client
// 英雄(選擇的是艾希)
hero hero = factory.createhero();
hero.print();
hero.say();
// 天賦
talent talent = factory.createtalent();
talent.print();
// 召喚師技能
skill skill = factory.createskill();
skill.choose(0, 2);}}
客戶端選擇遊戲模式,就相當於選擇了不同的工廠去生產遊戲元素(英雄,天賦,召喚師技能)。
也可以結合工廠模式使用,比如選擇遊戲型別後,利用工廠模式選擇英雄等等。
同工廠模式,客戶端不需要知道產品的建立過程。並且,客戶端只需要選擇遊戲模式,就可以用工廠建立多個系列的產品(英雄,天賦,召喚師技能)。主要特點就是乙個工廠多系列產品。執行結果
玩局匹配,選召喚師峽谷:
控制台源計畫**的寒冰射手。
源計畫-艾希
常見的案例就是使用不同的資料庫,資料庫能處理使用者,也能處理關係。但是,資料庫分mysql,orical等。處理同樣或類似的事情,他們的具體實現存在差異。那就可以抽出乙個工廠基類,再分別寫兩個不同的工廠去處理。這樣的話,某些東西就可以做到可遷移的目的。
設計模式demo
github原始碼:
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
抽象工廠模式 常用設計模式 抽象工廠模式
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...
抽象工廠模式 設計模式(九) 抽象工廠模式
提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...