Decorator Pattern其實早就接觸過了,從java的輸入語句中可見一斑InputStream in = new BufferedInputStream(new FileInputStream(“test.txt”)); 其中BufferedInputStream 和FileInputStream 都是InputStream的子類,通過包含關(guān)系,讓外圍的類包含內(nèi)部那個類的功能及數(shù)據(jù),說的形象一點,就是在內(nèi)部那個類外面加了一層裝飾。這也是裝飾模型最核心的概念。
Factory Pattern
書中舉了匹薩店的例子,一開始的類,將制作不同類型匹薩的方法都包含在里面,整個類顯得很冗余。順著正常的思路,將制作匹薩的方法從這個類里面剝離出去單獨形成一個類,這個類就像生產(chǎn)對象的工廠,只要你告訴它該生產(chǎn)的產(chǎn)品的型號,它就生產(chǎn)對應(yīng)的對象再發(fā)送給客戶。
按照書中的例子,如果匹薩店開在同一個城市以內(nèi),匹薩的風(fēng)味多樣,那么上述的模式很好地實現(xiàn)了上面的功能。但如果是連鎖店,每個地方的風(fēng)味不同呢?……
是的,每個地方的風(fēng)味不同,但同一個地方不同匹薩的種類卻相當(dāng)有限。也就是說可以有一個匹薩店父類,然后各地的分店是這個父類的子類。而其中最重要的制作匹薩的方法在父類中被聲明為虛函數(shù),由各個具體的子類來實現(xiàn)。這樣“工廠”又被搬回具體的類中間。
具體如何使用,我個人覺得是要看情況的。上面兩個是工廠模式的兩種表現(xiàn)形式。
對于后一種模式,里面用到的對象,比如例子中匹薩的原材料,同樣可以用工廠模式來實現(xiàn),這樣程序的結(jié)構(gòu)就相當(dāng)靈活了。