抽象工廠模式

2021-08-28 04:47:12 字數 3324 閱讀 4780

抽象工廠模式:

(使用抽象類建立乙個工廠,此工廠生產多類產品,每個產品對於乙個繼承此工廠的具體工廠類,在使用工廠生成器產生不同的工廠,根據工廠產生產品)

抽象工廠模式(abstract factory),提供乙個建立一系列相關或互相依賴物件的介面,而無需指定它們具體的類。

與工廠模式的區別:意圖:

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

主要解決:

主要解決介面選擇的問題。

何時使用:

系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品。

如何解決:

在乙個產品族裡面,定義多個產品。

關鍵**:

在乙個工廠裡聚合多個同類產品。 優點:當乙個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同乙個產品族中的物件。

缺點:

產品族擴充套件非常困難,要增加乙個系列的某一產品,既要在抽象的 creator 裡加**,又要在具體的裡面加**。

使用場景:

1、qq 換**,一整套一起換。

2、生成不同作業系統的程式。

注意事項:

產品族難擴充套件,產品等級易擴充套件。

我們將建立 shape 和 color 介面和實現這些介面的實體類。下一步是建立抽象工廠類 abstractfactory。接著定義工廠類;shapefactory 和 colo***ctory,這兩個工廠類都是擴充套件了; abstractfactory。然後建立乙個工廠創造器/生成器類 factoryproducer; abstractfactorytestdemo,我們的演示類使用 factoryproducer 來獲取 abstractfactory物件。它將向 abstractfactory 傳遞形狀資訊 shape(circle / rectangle / square),以便獲取它所需物件的型別。同時它還向 abstractfactory 傳遞顏色資訊 color(red / green / blue),以便獲取它所需物件的型別。

* shape產品

*/public inte***ce shape

/** * color產品

*/public inte***ce color

1.shape產品具體實現類

/**

* 具體實現類rectangle

*/class rectangle implements shape

}/**

* 具體實現類square

*/class square implements shape

}/**

* 具體實現類circle

*/class circle implements shape

}

2.color產品具體實現類

/**

* 具體實現類red

*/class red implements color

}/**

* 具體實現類green

*/class green implements color

}/**

* 具體實現類blue

*/class blue implements color

}

/**

* 抽象工廠模式

*/public abstract class abstractfactory

/**

* shapefactroy工廠

*/public class shapefactroy extends abstractfactory

if(shapetye.equalsignorecase("circle"))

else if(shapetye.equalsignorecase("rectangle"))

else if(shapetye.equalsignorecase("square"))

return null;

}@override

public color getcolor(string colortype)

}/**

* colo***ctory工廠:獲得shape產品和color產品

*/public class colo***ctory extends abstractfactory

@override

public color getcolor(string colortype)

if(colortype.equalsignorecase("red"))else if (colortype.equalsignorecase("green"))else if(colortype.equalsignorecase("blue"))

return null;}}

/**

* 工廠生成器

*/public class factroyproducer else if(factorytype.equalsignorecase("color"))

return null;}}

public class abstractfactorytestdemo 

}輸出結果:

use circle draw()!

use rectangle draw()!

use square draw()!

use red fill()!

use green fill()!

use blue fill()!

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

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

工廠模式 抽象工廠模式

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

工廠模式 抽象工廠模式

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