核心:為建立一組或相互依賴的物件提供介面,而無需指定具體類。
在場景類中,沒有任何乙個方法與實現類有關係,對於乙個產品來說,我們只要知道它的工廠方法就可以直接生產乙個產品物件,無須關心它的實現類。
一、女媧造人(男、女)
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 使用,建立...