抽象工廠模式(abstract factory pattern)是提供了乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
優點:當乙個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同乙個產品族中的物件,方便切換產品系列。
缺點:產品族擴充套件非常困難,要增加乙個系列的某一產品,既要在抽象的 creator 裡加**,又要在具體的裡面加**。
uml類圖模型:
2 .男女款式介面:
男孩款式:
package com.test.service.***;
/** * 男孩款式
*@author 葫蘆娃
* */
public
inte***ce
boy
女孩款式:
package com.test.service.***;
/** * 女孩款式
*@author 葫蘆娃
* */
public
inte***ce
girl
3 .產品類:
新年風格男款類:
package com.test.impl.product;
import com.test.service.***.boy;
/** * 新年風格男款
*@author 葫蘆娃
* */
public
class
hnboy
implements
boy
}
新年風格女款類:
package com.test.impl.product;
import com.test.service.***.girl;
/** * 新年風格女款
*@author 葫蘆娃
* */
public
class
hngirl
implements
girl
}
聖誕風格男款類:
package com.test.impl.product;
import com.test.service.***.boy;
/** * 聖誕風格男款
*@author 葫蘆娃
* */
public
class
mcboy
implements
boy
}
聖誕風格女款類:
package com.test.impl.product;
import com.test.service.***.girl;
/** * 聖誕風格女款
*@author 葫蘆娃
* */
public
class
mcgirl
implements
girl
}
4 .人物抽象工廠類
package com.test.service.factory;
import com.test.service.***.boy;
import com.test.service.***.girl;
/** * 人物的實現介面
*@author 葫蘆娃
* */
public
inte***ce
personfactory
5 . 兩種主題風格的工廠類
新年風格工廠類:
package com.test.service.holiday;
import com.test.impl.product.hnboy;
import com.test.impl.product.hngirl;
import com.test.service.factory.personfactory;
import com.test.service.***.boy;
import com.test.service.***.girl;
/** *@author 葫蘆娃
* */
public
class
hnfactory
implements
personfactory
@override
public girl getgirl()
}
聖誕風格工廠:
package com.test.service.holiday;
import com.test.impl.product.mcboy;
import com.test.impl.product.mcgirl;
import com.test.service.factory.personfactory;
import com.test.service.***.boy;
import com.test.service.***.girl;
/** * 聖誕風格工廠(merry christmas factory)
*@author 葫蘆娃
* */
public
class
mcfctory
implements
personfactory
@override
public girl getgirl()
}
6 . 客戶端:
package com
.test
.client
;import com
.test
.service
.factory
.personfactory
;import com
.test
.service
.holiday
.hnfactory
;import com
.test
.service
.holiday
.mcfctory
;import com
.test
.service
.***
.boy
;import com
.test
.service
.***
.girl
;/**
* 客戶端
* @author 葫蘆娃
* */
public class client
}
執行結果:
---
----
----
----
--新年風格男款--
----
----
----
----
----
----
----
----
---新年風格女款--
----
----
----
----
----
----
----
----
---聖誕風格男款--
----
----
----
----
----
----
----
----
---聖誕風格女款--
----
----
----
----
--
抽象工廠的優點:
1. 像personfactory factory1 = new hnfactory(),在乙個應用中初始化的時候只會出現一次,改變乙個具體工廠變得容易,只需要改變具體的工廠,就可以使用不同的產品配置。
2. 讓建立例項的過程與客戶端分離,客戶端通過它們的抽象介面,操縱例項,產品的具體類名也被工廠分離,不會出現在,客戶端**中。
抽象工廠的缺點:抽象工廠方便切換產品系列,卻在新增功能時候,卻需要更改三個工廠類,**改動太大。
抽象工廠模式 設計模式3之抽象工廠模式
工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...
設計模式之抽象工廠模式
目標 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如 access sql server 產品的具體類名被具體工廠的實現分離 下面是示例 include include include using namespace std 使用者抽象介面 class ius...
設計模式之抽象工廠模式
定義 abstract factory,提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類 場景 有一家生產螺絲螺帽的工廠,螺絲有兩種型號 公的和母的,螺帽也有兩種型號 公的和母的。沒個車間只生產一種螺絲和螺帽。這裡車間就是乙個concretefactory 具體工廠 螺絲和螺帽便是...