為什么要叫工廠模式呢?就是為了生產(chǎn)對(duì)象!一個(gè)對(duì)象的創(chuàng)建過程比較復(fù)雜的時(shí)候,就可以使用工廠模式來創(chuàng)建對(duì)象。
工廠不是new一個(gè)對(duì)象,而是創(chuàng)建對(duì)象的過程,比方說new這個(gè)對(duì)象之前有100多行的準(zhǔn)備工作,比較復(fù)雜,就可以交給工廠來做。
Springcore的核心就是工廠模式,隱藏了創(chuàng)建對(duì)象的過程
SpringAOP的核心設(shè)計(jì)模式是代理模式
SpringMVC的核心設(shè)計(jì)模式是觀察者模式
問題:有了factoryMethod為什么還要abstractFactory?
我的答案:在factoryMethod當(dāng)中,工廠中除了有生產(chǎn)對(duì)象的工廠方法外還有自己的業(yè)務(wù)邏輯,擴(kuò)展的方式只能是通過繼承該類來擴(kuò)展,而在abstractFactory當(dāng)中,將該工廠方法抽象出一個(gè)接口,包含有生產(chǎn)對(duì)象的工廠方法,將自己的業(yè)務(wù)邏輯剔除出去放到一個(gè)調(diào)用的A類當(dāng)中,這樣做的好處是避免了通過繼承來擴(kuò)展工廠方法,而是采用聚合的方式來實(shí)現(xiàn)。
其實(shí)就是將AB兩個(gè)類拆成了AIB三個(gè),不在使用繼承的方式,而是采用聚合的方式。
簡單工廠:其實(shí)不算是一種設(shè)計(jì)模式,所以更應(yīng)該說工廠模式有兩種,即以下兩種。
工廠方法(factoryMethod):
抽象工廠(abstractFactory):
One uses inheritance and one uses composition.
One
creates only one product and the other creates a family of products.
One makes
use of the concrete types the subclasses create and the other's methods are
purely implemented to create products.
