資源描述:
《抽象工廠(Abstract-Factory)模式.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、一、?抽象工廠(AbstractFactory)模式抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。為了方便引進(jìn)抽象工廠模式,引進(jìn)一個(gè)新概念:產(chǎn)品族(ProductFamily)。所謂產(chǎn)品族,是指位于不同產(chǎn)品等級結(jié)構(gòu),功能相關(guān)聯(lián)的產(chǎn)品組成的家族。如圖:?圖中一共有四個(gè)產(chǎn)品族,分布于三個(gè)不同的產(chǎn)品等級結(jié)構(gòu)中。只要指明一個(gè)產(chǎn)品所處的產(chǎn)品族以及它所屬的等級結(jié)構(gòu),就可以唯一的確定這個(gè)產(chǎn)品。引進(jìn)抽象工廠模式所謂的抽象工廠是指一個(gè)工廠等級結(jié)構(gòu)可以創(chuàng)建出分屬于不同產(chǎn)品等級結(jié)構(gòu)的一個(gè)產(chǎn)品族中的
2、所有對象。如果用圖來描述的話,如下圖:?二、?AbstractFactory模式的結(jié)構(gòu):?圖中描述的東西用產(chǎn)品族描述如下:?抽象工廠(AbstractFactory)角色:擔(dān)任這個(gè)角色的是工廠方法模式的核心,它是與應(yīng)用系統(tǒng)商業(yè)邏輯無關(guān)的。具體工廠(ConcreteFactory)角色:這個(gè)角色直接在客戶端的調(diào)用下創(chuàng)建產(chǎn)品的實(shí)例。這個(gè)角色含有選擇合適的產(chǎn)品對象的邏輯,而這個(gè)邏輯是與應(yīng)用系統(tǒng)的商業(yè)邏輯緊密相關(guān)的。抽象產(chǎn)品(AbstractProduct)角色:擔(dān)任這個(gè)角色的類是工廠方法模式所創(chuàng)建的對
3、象的父類,或它們共同擁有的接口。具體產(chǎn)品(ConcreteProduct)角色:抽象工廠模式所創(chuàng)建的任何產(chǎn)品對象都是某一個(gè)具體產(chǎn)品類的實(shí)例。這是客戶端最終需要的東西,其內(nèi)部一定充滿了應(yīng)用系統(tǒng)的商業(yè)邏輯。三、?程序舉例:該程序演示了抽象工廠的結(jié)構(gòu),本身不具有任何實(shí)際價(jià)值。//?Abstract?Factory?pattern?--?Structural?example??using?System;//?"AbstractFactory"abstract?class?AbstractFactory{
4、??//?Methods??abstract?public?AbstractProductA?CreateProductA();??abstract?public?AbstractProductB?CreateProductB();}//?"ConcreteFactory1"class?ConcreteFactory1?:?AbstractFactory{??//?Methods??override?public?AbstractProductA?CreateProductA()??{????r
5、eturn?new?ProductA1();??}??override?public?AbstractProductB?CreateProductB()??{????return?new?ProductB1();??}}//?"ConcreteFactory2"class?ConcreteFactory2?:?AbstractFactory{??//?Methods??override?public?AbstractProductA?CreateProductA()??{????return?n
6、ew?ProductA2();??}??override?public?AbstractProductB?CreateProductB()??{????return?new?ProductB2();??}}//?"AbstractProductA"abstract?class?AbstractProductA{}//?"AbstractProductB"abstract?class?AbstractProductB{??//?Methods??abstract?public?void?Inter
7、act(?AbstractProductA?a?);}//?"ProductA1"class?ProductA1?:?AbstractProductA{}//?"ProductB1"class?ProductB1?:?AbstractProductB{??//?Methods??override?public?void?Interact(?AbstractProductA?a?)??{????Console.WriteLine(?this?+?"?interacts?with?"?+?a?);?
8、?}}//?"ProductA2"class?ProductA2?:?AbstractProductA{}//?"ProductB2"class?ProductB2?:?AbstractProductB{??//?Methods??override?public?void?Interact(?AbstractProductA?a?)??{????Console.WriteLine(?this?+?"?interacts?with?"?+?a?);??}}//?"Client"?-?the?int