抽象工廠模式

2021-07-11 18:45:46 字數 4701 閱讀 3870

抽象工廠模式:

1.模式動機:

在工廠方法模式中具體工廠負責生產具體的產品,每乙個具體工廠對應一種具體產品,工廠方法也具有唯一性,

但有時候我們需要乙個工廠可以提供多個產品物件,而不是單一的產品物件,這時就要用抽象工廠模式。

2.為了能清晰的理解抽象工廠模式,需要先引進兩個概念:

a.產品等級結構:即產品的繼承結構,

如抽象類是電視機,其子類有海爾tv,海信tv,那抽象電視機與具體品牌的電視機之間就構成了乙個產品等級結構。

b.產品族:在抽象工廠模式中,產品族就是由同乙個工廠生產的,位於不同產品等級結構的一組產品,如海爾電器工廠生產的海爾tv,海爾電冰箱。

a.抽象工廠(abstractfactory)

抽象工廠用於宣告生產抽象產品的方法,在乙個抽象工廠中可以定義一組方法,每乙個方法對應乙個產品等級結構

b.具體工廠(concretefactory)

具體工廠實現了抽象 工廠宣告的生產抽象產品的方法,生成一組具體產品,這些產品構成了乙個產品族,每乙個產品都位於某個產品等級結構中

c.抽象產品(abstractproduct)

抽象產品為每種產品宣告介面,在抽象產品中定義了產品的抽象業務方法

d.具體產品(concreteproduct)

具體產品定義具體工廠生產的具體產品物件,實現抽象產品介面中定義的業務方法

***************====分界線********************=

4.具體**實現:

第一步: 寫乙個抽象工廠類 :電器工廠類,用於宣告生成抽象產品的方法;

package abstractfactory;

import abstractproduct.airconditioner;

import abstractproduct.television;

public inte***ce efactory

第二步:具體工廠類。(這裡具體寫了三個類:海爾,海信,tcl)

package concretefactory;

import abstractfactory.efactory;

import abstractproduct.airconditioner;

import abstractproduct.television;

import concreteproduct.haierairconditioner;

import concreteproduct.haiertelevision;

/**

* 海爾工廠類

* 實現了抽象工廠宣告的生成抽象產品的方法

*/ public class haie***ctory implements efactory

public airconditioner produceairconditioner() package concretefactory;

import abstractfactory.efactory;

import abstractproduct.airconditioner;

import abstractproduct.television;

import concreteproduct.hisenseairconditioner;

import concreteproduct.hisensetelevision;

/**

* 海信工廠類

*/ public class hisensefactory implements efactory

public airconditioner produceairconditioner()
package concretefactory;

import abstractfactory.efactory;

import abstractproduct.airconditioner;

import abstractproduct.television;

import concreteproduct.tclairconditioner;

import concreteproduct.tcltelevision;

/**

* 具體工廠類:tcl工廠類

* 實現了抽象工廠宣告的生成抽象產品的方法

*/ public class tclfactory implements efactory

public airconditioner produceairconditioner() 第三步:寫抽象產品類(空調類,電視類)

package abstractproduct;

/**

* 抽象產品類 : 空調類

* 為每種產品宣告介面

* 定義了產品的抽象業務方法

*/ public inte***ce airconditioner

package abstractproduct;

/**

* 抽象產品類 : 電視機類

* 可以是乙個介面,也可以是乙個抽象類

* 為每種產品宣告介面

* 定義了產品的抽象業務方法

*/ public inte***ce television

第四步:具體產品類;

package concreteproduct;

import abstractproduct.airconditioner;

/**

* 具體產品類: 海爾空調類

*/ public class haierairconditioner implements airconditionerpackage concreteproduct;

package concreteproduct;

import abstractproduct.airconditioner;

/**

* 海信空調類

*/ public class hisenseairconditioner implements airconditionerpackage concreteproduct;

package concreteproduct;

import abstractproduct.airconditioner;

/**

* 具體產品類: tcl空調類

*/ public class tclairconditioner implements airconditioner

}package concreteproduct;

第五步:測試類;

import abstractfactory.efactory;

import abstractproduct.airconditioner;

import abstractproduct.television;

import concretefactory.hisensefactory;

/**

* 抽象工廠模型

* @author gong

* */

public class test }

執行結果:

包圖:

5.說明:

在這個例項中,hairtelevision 和 tcltelevision 是television的子類,實現了在television中定義的業務方法play()。

television、hairtelevision和tcltelevision構成了乙個產品等級結構。

hairairconditioner 和 tclairconditioner 是airconditioner 的子類,實現了在airconditioner中定義的業務方法 changetemperature()。

airconditioner、 hairairconditioner 和 tclairconditioner 也構成了乙個產品等級結構。

haie***ctory 和 tclfactory 是 efactory 的乙個子類,實現了在efactory中定義的工廠方法,用於建立具體產品物件。

haie***ctory 和 tclfactory 所生產的具體產品分別構成了乙個產品族。

efactory、haie***ctory 和 tclfactory 構成了乙個工廠等級結構。

6.抽象工廠模式的總結:

優點:

抽象工廠模式隔離了具體類的生成,使得客戶並不需要知道什麼被建立

當乙個產品族中的多個物件被設計成一起工作時,

它能保證客戶端始終只使用同乙個產品族中的物件

增加新的具體工廠和產品族很方便,無須修改已有系統

缺點:

如果要增加一種新品牌的電器,即增加乙個新的產品族,如增加海信電視機和海信空調,則只需要對應增加乙個具體工廠即可

,原有**無須做任何修改。

但如果要增加一種新的產品,如增加一種新的電器產品洗衣機,則原有類需要做較大的修改,在抽象工廠中需要宣告乙個生產洗衣機的方法,

所有的具體工廠類都需要實現該方法。

抽象工廠模式和簡單工廠模式在一定程度上有點相似的地方,兩者都是為了實現高內聚,低耦合的設計思想,它會對我們軟體的設計結構有一些啟發。

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...

工廠模式 抽象工廠模式

這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...

工廠模式 抽象工廠模式

子類父類代換 場景 在不同的條件下,需要建立不同的實現子類時。如網路通訊可以使用tcp udp。可以實現同乙個介面,通過工廠類根據條件 tcp或udp 來例項化不同的子類。這些子類符合黎克特制代換原則。public inte ce tlprotocol public class tcpimpleme...