-
抽象工廠模式類圖查看全部
-
一,工廠方法和抽象工廠方法的對(duì)比: 1)工廠模式是一種極端情況下的抽象工廠模式,通過前面的類圖和代碼實(shí)現(xiàn)我們可以看到這樣一個(gè)對(duì)比,而抽象工廠模式可以看成是工廠模式的推廣, 2)工廠模式用來創(chuàng)建一個(gè)產(chǎn)品的等級(jí)結(jié)構(gòu),而抽象工廠模式是用來創(chuàng)建多個(gè)產(chǎn)品的等級(jí)結(jié)構(gòu), 3)工廠模式只有一個(gè)抽象產(chǎn)品類,而抽象工廠模式有多個(gè)抽象產(chǎn)品類,總之就是單一對(duì)多個(gè)產(chǎn)品的這種對(duì)比。 二,工廠模式幫助我們實(shí)現(xiàn)了什么呢? 1)系統(tǒng)可以在不修改具體工廠角色的情況下引進(jìn)新的產(chǎn)品, 2)客戶端不必關(guān)系對(duì)象如何去創(chuàng)建,明確了職責(zé),對(duì)象具體的創(chuàng)建交給了具體的產(chǎn)品,product1,product2,客戶端只要告訴工廠我需要哪一,product1還是product2,它們具體是怎么創(chuàng)建的,怎么組合的,都交給了具體的產(chǎn)品product1,product2 3)更好的理解面向?qū)ο蟮脑瓌t,面向接口編程,而不是面向?qū)崿F(xiàn)編程。 那我們整體的工廠模式就是這樣一個(gè)原則。 三,工廠模式適用于哪些場景呢? 1)一個(gè)系統(tǒng)應(yīng)當(dāng)不依賴于產(chǎn)品類實(shí)例被創(chuàng)立,組成和表示的細(xì)節(jié),就是說這個(gè)產(chǎn)品如何被創(chuàng)建,組成和表現(xiàn),我們都?xì)w結(jié)到具體的產(chǎn)品是如何實(shí)現(xiàn)上去了,與前端的client,和中端的factory都是沒有關(guān)系的, 2)這個(gè)系統(tǒng)的產(chǎn)品至少有一個(gè)產(chǎn)品族,工廠方法模式就是一個(gè)產(chǎn)品族,它是最簡單的一個(gè)等級(jí), 3)同屬于同一個(gè)產(chǎn)品族的產(chǎn)品是設(shè)計(jì)成在一起使用的,這是毋庸置疑的,同屬于一個(gè)系列的產(chǎn)品,就是在一起的, 4)不同的產(chǎn)品以一系列的接口的面貌出現(xiàn),從未使系統(tǒng)不依賴于接口實(shí)現(xiàn)的細(xì)節(jié),我們都是面向接口編程的,不是面向?qū)崿F(xiàn)編程的,查看全部
-
我們通過代碼認(rèn)識(shí)工廠方法和抽象工廠方法,在現(xiàn)實(shí)的項(xiàng)目中,經(jīng)常用到的組件和API都有工廠方法模式的體現(xiàn) 1,JDBC。連接數(shù)據(jù)庫,訪問數(shù)據(jù)庫經(jīng)常用到的,JDBC是執(zhí)行SQL語句的API,JDBC可以為多種數(shù)據(jù)庫提供統(tǒng)一的訪問,它的實(shí)現(xiàn)過程: 1),首先是客戶端client,到一個(gè)數(shù)據(jù)操作工廠,接著調(diào)用接口,返回相應(yīng)的driver,有db2,mysql,oracle,sqlserver這幾種常見的數(shù)據(jù)庫,它可以平行擴(kuò)展,它可以有很多種,這樣就提供了統(tǒng)一的訪問接口,這樣客戶端需要哪一種,告訴數(shù)據(jù)操作工廠就可以了,就是具體需要由客戶端決定,這就是典型的工廠方法。 2,接下來看spring beanfactory,這是非常有名的工具,我們知道spring容器是一個(gè)控制反轉(zhuǎn),主要作用是生成bean,管理bean,從工廠模式來看,spring beanfactory就是生產(chǎn)bean,然后提供給客戶端。 來看一下bean實(shí)例化的過程: 1)調(diào)用bena的默認(rèn)構(gòu)造方式生成bean的實(shí)例,暫稱為instance1,如果在bean配置文件中注入了bean的屬性,則在instance1基礎(chǔ)上進(jìn)行屬性注入形成instance2,這種注入是覆蓋性的,如果bean實(shí)現(xiàn)了InitializingBean接口,則調(diào)用afterPropertiesSet()方法,來改變或者操作instance2,得到instance3。其中:InitializingBean是spring提供的一個(gè)初始化bean的類,如果實(shí)現(xiàn)了這個(gè)類,則必須實(shí)現(xiàn)afterPropertiesSet()方法,接下來,如果bean的配置文件中指定了inti-method="init"屬性,又會(huì)調(diào)用一個(gè)初始化方法,則在instance3的基礎(chǔ)上又會(huì)進(jìn)行一些改變,編程instance4.查看全部
-
功能雖然實(shí)現(xiàn)了,但是代碼有缺陷: 我們每來一個(gè)新的發(fā)型,我們都需要建一個(gè)新的hair,而且我們要在客戶端顯示的調(diào)用,這樣的代碼既不利于維護(hù),也不利于管理,為了解決這個(gè)問題,我們需要建一個(gè)hairFactory,對(duì)發(fā)型進(jìn)行統(tǒng)一的管理。查看全部
-
比較總結(jié)查看全部
-
抽象工廠模式類圖查看全部
-
工廠方法模式類圖查看全部
-
工廠模式與抽象工廠模式的區(qū)別查看全部
-
什么是工廠模式?查看全部
-
springbean的實(shí)例化的過程查看全部
-
spring beanfactory查看全部
-
模型類圖查看全部
-
適用工廠模式的場景查看全部
-
工廠模式的意圖查看全部
-
工廠模式的概念查看全部
舉報(bào)
0/150
提交
取消