Factory模式與Prototype模式的異同

2021-06-12 09:07:26 字數 1455 閱讀 5496

問題:現有兩類產品 1-ram,2--cpu,現在要生成具體的產品

macram,maccpu和winram,wincpu.

**如下:

/***a:abstract

*c:concrete

*//** 定義抽象產品ram的類 aprototyperam

* 同時他也是抽象工廠

*/abstract class aprototyperam implements cloneable

catch(clonenotsupportedexception e)

return o;}}

/** 定義抽象產品ram的類aprototypeproductcpu

* 同時他也是抽象工廠

*/abstract class aprototypecpu implements cloneable

catch(clonenotsupportedexception e)

return o;}}

/** 定義具體產品macram的類cprototypemacram

* 同時他也是具體工廠

*/class cprototypemacram extends aprototyperam

}/** 定義具體產品winram的類cprototypewinram

* 同時他也是具體工廠

*/class cprototypewinram extends aprototyperam

}/** 定義具體產品maccpu的類cprototypemaccpu

* 同時他也是具體工廠

*/class cprototypemaccpu extends aprototypecpu

}/** 定義具體產品wincpu的類cprototypewincpu

* 同時他也是具體工廠

*/class cprototypewincpu extends aprototypecpu

}/** 客戶端,使用cprototyperam和cprototypecpu生成如下產品

* macram,maccpu,winram,wincpu

*/public class prototype

}通過上面**,我們可以清楚地看到,用prototype模式實現工廠模式更為簡單,如果再配上原型管理器的話,那麼prototype模式則會變得更為靈活,限於篇幅,本文沒有講到原型管理器,有興趣的朋友可以參看後文列出的參考文獻。但同時,我們也發現,使用原形模式時,有乙個不足之處,即在客戶端**裡,我們必須顯示進行型別轉換,這樣可能導致錯誤。為了改正這一點,我想,我們可以使用真正的工廠模式將prototype模式再封裝一遍。對工廠模式的這項功能,恐怕,prototype原形模式就無能為力了。

總之,工廠模式和原形模式雖然在引入目的上不同,但在實現上,原形模式可以實現工廠模式同樣的功能。但讀者也不要因為這樣,而將兩者混為一體,因為,反過來,在將原形模式作為生成本身拷貝的這項功能使用時,工廠模式根本無法取代它。

Factory模式(工廠模式)

假設有如下的場景 賣pizza的,可以有很多種pizza cheesepizza,greekpizza,pepperonipizza 我們該如何處理它呢,當然我們可以宣告乙個類,類中建立每乙個種類的pizza。但是這樣有什麼問題嗎?我們沒有把需要改變的部分剝離出來。軟體設計的乙個原則就是 是易於擴充...

factory工廠模式

1.factory模式 兩個重要的功能 1 定義建立物件的介面,封裝了物件的建立 2 使得具體化類的工作延遲到了子類中。factory模式僅僅侷限於一類類 就是說product是一類,有乙個共同的基類 如果我們要為不同類的類提供 乙個物件建立的介面,那就要用abstractfactory了。我們經常...

設計模式 Factory

有一定程式設計經驗的xdjm對工廠方法模式肯定不會陌生了,曾經做過乙個遊戲大廳,那會的qt還沒有qml這個東東,為了能夠動態的載入頁面以及更加方便的除錯。每乙個window都是使用乙個xml去定義,裡面按照樹狀結構定義了各種型別的控制項。每個控制項都是widget的父類,window在載入介面時顯然...