設計模式 抽象工廠模式

2021-09-20 05:59:10 字數 3607 閱讀 7826

設計模式

抽象工廠模式(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 使用,建立...

抽象工廠模式 常用設計模式 抽象工廠模式

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...

抽象工廠模式 設計模式(九) 抽象工廠模式

提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...