(1)首先了解下簡單工廠模式。如圖:

簡單工廠模式圖1-1
工廠類一般用于生產(chǎn)其他對象。舉個例子,有個雪糕工廠可以創(chuàng)建各種雪糕,不用每次需要造一個雪糕時先建一個工廠吧,都是用現(xiàn)成的工廠直接生產(chǎn)。
簡單工廠類,根據(jù)傳的字符串不同,會創(chuàng)建不同的對象。此時有個嚴重的缺點就是,我增加一種運算,就要手動修改簡單工廠類,這樣是違背了開閉原則。
為什么說違背開閉原則?
? 簡單工廠類里面有創(chuàng)建對象的邏輯,當增加之前沒有的對象時,需要增加邏輯代碼。此時運算類的getResult()只有四種運算,如果我要增加取余數(shù)運算,也需要改此代碼。
(2)工廠方法模式:定義了一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。
使用工廠方法改造圖1-1:

工廠方法模式圖2-1
仔細觀察會發(fā)現(xiàn):工廠方法模式實現(xiàn)時,客戶端需要決定實例化哪一個工廠來實現(xiàn)運算類,選擇判斷的問題從簡單工廠遷移到客戶端了。