24種設計模式 抽象工廠模 式

2021-08-03 15:59:52 字數 3929 閱讀 8521

核心:為建立一組或相互依賴的物件提供介面,而無需指定具體類。

在場景類中,沒有任何乙個方法與實現類有關係,對於乙個產品來說,我們只要知道它的工廠方法就可以直接生產乙個產品物件,無須關心它的實現類。

一、女媧造人(男、女)

1、 人種介面

public inte***ce human
2、 黑色人種

public abstract class abstractblackhuman implements human

public void talk()

}

3、白色人種

public abstract class abstractwhitehuman implements human

public void talk()

}

4、黃色人種

public abstract class abstractyellowhuman implements human

public void talk()

}

5、黃色女性人種

public class femaleyellowhuman extends abstractyellowhuman

}

6、黃色男性人種

public class maleyellowhuman extends abstractyellowhuman

}

7、八卦爐定義

public inte***ce humanfactory
8、生產女性的八卦爐

public class femalefactory implements humanfactory

//生產出白人女性

public human createwhitehuman()

//生產出黑人女性

public human createblackhuman()

}

9、生產男性的八卦爐

public class malefactory implements humanfactory

//生產出白人男性

public human createwhitehuman()

//生產出黑人男性

public human createblackhuman()

}

10、女媧造人

/**

* 符合迪公尺特法則

*/public class nvwa

}

生產乙個黑人女性

黑色人種的**顏色是黑色的

黑人會說話,一般人聽不懂!

黑人女人

生產乙個黑人男性

黑色人種的**顏色是黑色的

黑人會說話,一般人聽不懂!

黑人男人

二、抽象工廠的模式的定義

1. 抽象產品a類

public abstract class abstractproducta 

//每個產品相同方法,不同實現

public abstract void dosomething();

}

2. 產品a1(等級1)的實現類

public class producta1 extends abstractproducta

}

3. 產品a2(等級2)的實現類

public class producta2 extends abstractproducta

}

4. 抽象產品b類

public abstract class abstractproductb 

public abstract void dosomething();

}

5. 產品b1(等級1)的實現類

public class productb1 extends abstractproductb

}

6. 產品b2(等級2)的實現類

public class productb2 extends abstractproductb

}

7. 抽象工廠類

public abstract class abstractcreator

8. 產品等級1的實現類

public class creator1 extends abstractcreator

//只生產產品等級為1的b產品

public abstractproductb createproductb()

}

9. 產品等級2的實現類

public class creator2 extends abstractcreator

//只生產產品等級為2的b產品

public abstractproductb createproductb()

}

10. 場景類

public class client 

}

在場景類中,沒有任何乙個方法與實現類有關係,對於乙個產品來說,我們只要知道它的工廠方法就可以直接生產乙個產品物件,無須關心它的實現類。

三、抽象工廠的模式的應用

1. 抽象工廠的優點

封閉性:每個產品的實現類不是高層模組要關心的,它只關心介面或者抽象,它不關心物件是如何建立出來,這由誰負責呢?工廠類,只要知道工廠類是誰,我就能建立乙個需要的物件。

2. 抽象工廠的缺點

產品族擴充套件困難,如果增加了產品c,也就是說產品家庭由原來的2個增加到3個,程式就會有很大改動,

抽象類abstractcreator要增加乙個方法createproductc(),然後兩個實現類都 要修改,嚴重違反了開閉原則,更重要的是改變了「契約」——介面或抽象類,有是一段有毒**。

3. 抽象工廠的使用場景

4. 抽象工廠的注意事項

缺點中,抽象工廠模式的產品族擴充套件比較困難,但是產品等級擴充套件非常容易。

上面的女媧造人,增加乙個雙性人這個產品等級很容易,只用增加三個產品類分別extendsabstractblackhuman三個膚色,分別對應不同膚色,然後建立乙個工廠類,專門負責不同膚色人的雙性人的建立。

四、最佳實踐

使用的場景非常多,比如在產品開發過程中,涉及不同作業系統 的時候,都可以考慮使用抽象工廠模式

24種設計模式 抽象工廠模式

1,意圖 提供乙個穿件一系列相關或相互依賴物件的介面,而無需指定他們具體的類 class font class brush class pen class resourcefactory class pen virtual pen virtual void drawline protected co...

23種設計模式 抽象工廠模式

什麼是抽象工廠模式?抽象工廠模式是所有形態的工廠模式中最為抽象和最其一般性的。抽象工廠模式可以向客戶端 提供乙個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。舉個例子,現在有兩個品牌廠商,小公尺和華為,小公尺生產手機和路由器,華為也生產手機和路由器,但是小公尺生產的...

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

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...