模式與重構(gòu)
設(shè)計(jì)模式總結(jié)-Visitor模式
摘要: Visitor模式的一個(gè)優(yōu)點(diǎn)體現(xiàn)在對(duì)集合元素的訪問(wèn)中:由于集合中的可訪問(wèn)元素都實(shí)現(xiàn)了Visitable接口,所以在迭代集合的過(guò)程中,我們可以將每個(gè)元素都看成是接口類(lèi)型。
其次由于JAVA語(yǔ)言的多態(tài)性,雖然每個(gè)元素都是接口類(lèi)型(Visitable),但每個(gè)元素的實(shí)現(xiàn)類(lèi)不同,所以在調(diào)用accept方法時(shí),虛擬機(jī)“知道”應(yīng)該調(diào)起那個(gè)正確的方法(例如:集合中的一個(gè)String元素,會(huì)調(diào)用StringElement的accept方法) 閱讀全文
其次由于JAVA語(yǔ)言的多態(tài)性,雖然每個(gè)元素都是接口類(lèi)型(Visitable),但每個(gè)元素的實(shí)現(xiàn)類(lèi)不同,所以在調(diào)用accept方法時(shí),虛擬機(jī)“知道”應(yīng)該調(diào)起那個(gè)正確的方法(例如:集合中的一個(gè)String元素,會(huì)調(diào)用StringElement的accept方法) 閱讀全文
設(shè)計(jì)模式總結(jié)-Strategy模式
摘要: 策略操作定義了策略的輸入和輸出,而把策略的實(shí)現(xiàn)工作留給了各個(gè)類(lèi)。這些類(lèi)以不同的方案來(lái)實(shí)現(xiàn)同一操作,它們?yōu)橛脩籼峁┙y(tǒng)一的接口,因而這些類(lèi)可以相互替換。
Strategy模式允許多種策略共存,而代碼不會(huì)混亂。策略模式也可以實(shí)現(xiàn)模式選擇邏輯和策略本身相分離。
Strategy模式的意圖在于把可選的策略或方案封裝在不同的類(lèi)中,并在這些類(lèi)中實(shí)現(xiàn)一個(gè)共同的操作。 閱讀全文
Strategy模式允許多種策略共存,而代碼不會(huì)混亂。策略模式也可以實(shí)現(xiàn)模式選擇邏輯和策略本身相分離。
Strategy模式的意圖在于把可選的策略或方案封裝在不同的類(lèi)中,并在這些類(lèi)中實(shí)現(xiàn)一個(gè)共同的操作。 閱讀全文
設(shè)計(jì)模式總結(jié)-State模式
摘要: 使用狀態(tài)模式后,客戶端外界可以直接使用事件Event實(shí)現(xiàn),根本不必關(guān)心該事件導(dǎo)致如何狀態(tài)變化,這些是由狀態(tài)機(jī)等內(nèi)部實(shí)現(xiàn)。這是一種Event-condition-State,狀態(tài)模式封裝了condition-State部分。
每個(gè)狀態(tài)形成一個(gè)子類(lèi),每個(gè)狀態(tài)只關(guān)心它的下一個(gè)可能狀態(tài),從而無(wú)形中形成了狀態(tài)轉(zhuǎn)換的規(guī)則。如果新的狀態(tài)加入,只涉及它的前一個(gè)狀態(tài)修改和定義。 閱讀全文
每個(gè)狀態(tài)形成一個(gè)子類(lèi),每個(gè)狀態(tài)只關(guān)心它的下一個(gè)可能狀態(tài),從而無(wú)形中形成了狀態(tài)轉(zhuǎn)換的規(guī)則。如果新的狀態(tài)加入,只涉及它的前一個(gè)狀態(tài)修改和定義。 閱讀全文
設(shè)計(jì)模式總結(jié)-Command模式
摘要: 讓方法運(yùn)行最常見(jiàn)的方式是調(diào)用之,但是在很多情況下,我們不能控制和提供方法執(zhí)行的上下文和時(shí)機(jī)。這種情況下,可以把方法封裝在對(duì)象中。通過(guò)在對(duì)象中存儲(chǔ)調(diào)用方法所需的信息,就可以讓客戶端或者服務(wù)決定何時(shí)調(diào)用這個(gè)方法。
Command模式的意圖是把請(qǐng)求封裝在對(duì)象中。
--摘自《Java設(shè)計(jì)模式》第24章:Command(命令)模式
閱讀全文
Command模式的意圖是把請(qǐng)求封裝在對(duì)象中。
--摘自《Java設(shè)計(jì)模式》第24章:Command(命令)模式
閱讀全文
設(shè)計(jì)模式總結(jié)-Memento模式(二)
摘要: Memento模式和其它模式的結(jié)合應(yīng)用:
一、“Mementor”模式和“堆棧”的結(jié)合-“GUI界面撤銷(xiāo)功能”的實(shí)現(xiàn)
二、“Mementor”模式和“Observer”模式的結(jié)合-“通知式恢復(fù)”
三、“Mementor”模式和“Observer”模式、“責(zé)任鏈”模式的結(jié)合-“鏈?zhǔn)酵ㄖ謴?fù)”
四、“Mementor”模式和“Flyweight”模式的結(jié)合:減少相同對(duì)象的拷貝 閱讀全文
一、“Mementor”模式和“堆棧”的結(jié)合-“GUI界面撤銷(xiāo)功能”的實(shí)現(xiàn)
二、“Mementor”模式和“Observer”模式的結(jié)合-“通知式恢復(fù)”
三、“Mementor”模式和“Observer”模式、“責(zé)任鏈”模式的結(jié)合-“鏈?zhǔn)酵ㄖ謴?fù)”
四、“Mementor”模式和“Flyweight”模式的結(jié)合:減少相同對(duì)象的拷貝 閱讀全文
設(shè)計(jì)模式總結(jié)-Memento模式(一)
摘要: Memento模式的特點(diǎn):
在需要提供保存、恢復(fù)對(duì)象狀態(tài)的類(lèi)中,必須提供兩個(gè)方法:
.保存對(duì)象當(dāng)前狀態(tài)方法:將對(duì)象自身(this)作為參數(shù)傳入,創(chuàng)建備忘錄。
.恢復(fù)對(duì)象之前狀態(tài)的方法:取出備忘錄/接收一個(gè)備忘錄對(duì)象,從中獲取對(duì)象之前的狀態(tài)
模式的缺點(diǎn)是耗費(fèi)大,如果內(nèi)部狀態(tài)很多,再保存一份,無(wú)意要浪費(fèi)大量?jī)?nèi)存.
注意:Memento模式保存的是操作前對(duì)象的狀態(tài),而不是操作后對(duì)象的狀態(tài);否則就沒(méi)辦法做恢復(fù)了 閱讀全文
在需要提供保存、恢復(fù)對(duì)象狀態(tài)的類(lèi)中,必須提供兩個(gè)方法:
.保存對(duì)象當(dāng)前狀態(tài)方法:將對(duì)象自身(this)作為參數(shù)傳入,創(chuàng)建備忘錄。
.恢復(fù)對(duì)象之前狀態(tài)的方法:取出備忘錄/接收一個(gè)備忘錄對(duì)象,從中獲取對(duì)象之前的狀態(tài)
模式的缺點(diǎn)是耗費(fèi)大,如果內(nèi)部狀態(tài)很多,再保存一份,無(wú)意要浪費(fèi)大量?jī)?nèi)存.
注意:Memento模式保存的是操作前對(duì)象的狀態(tài),而不是操作后對(duì)象的狀態(tài);否則就沒(méi)辦法做恢復(fù)了 閱讀全文
設(shè)計(jì)模式總結(jié)-Observer模式
摘要: 下面是Observer模式的實(shí)現(xiàn)過(guò)程:
·創(chuàng)建一個(gè)被觀察者,繼承java.util.Observable
·創(chuàng)建一個(gè)觀察者,實(shí)現(xiàn)java.util.Observer接口
·注冊(cè)觀察著,調(diào)用addObserver(Observer observer)
·在被觀察者改變對(duì)象內(nèi)部狀態(tài)的地方,調(diào)用setChanged()方法,然后調(diào)用notifyObservers(Object)方法,通知被觀察者
·在觀察者的update(Object)方法中,對(duì)改變做出響應(yīng)。 閱讀全文
·創(chuàng)建一個(gè)被觀察者,繼承java.util.Observable
·創(chuàng)建一個(gè)觀察者,實(shí)現(xiàn)java.util.Observer接口
·注冊(cè)觀察著,調(diào)用addObserver(Observer observer)
·在被觀察者改變對(duì)象內(nèi)部狀態(tài)的地方,調(diào)用setChanged()方法,然后調(diào)用notifyObservers(Object)方法,通知被觀察者
·在觀察者的update(Object)方法中,對(duì)改變做出響應(yīng)。 閱讀全文
設(shè)計(jì)模式總結(jié)-Flyweight模式
摘要: Flyweight模式一般由幾個(gè)部分組成:
·Flyweight接口(抽象類(lèi)) :定義了一個(gè)可共享的元類(lèi)
·Flyweight實(shí)現(xiàn)類(lèi):實(shí)現(xiàn)了元類(lèi)中的操作,而且可能會(huì)提供一個(gè)用于保存內(nèi)部狀態(tài)(共享屬性)的空間
·Flyweight Factory:創(chuàng)建Flyweight的工廠類(lèi),創(chuàng)建后將其保存到Flyweight Pool中
·Flyweight Pool:緩沖Flyweight對(duì)象的池,通常包含在工廠類(lèi)中 閱讀全文
·Flyweight接口(抽象類(lèi)) :定義了一個(gè)可共享的元類(lèi)
·Flyweight實(shí)現(xiàn)類(lèi):實(shí)現(xiàn)了元類(lèi)中的操作,而且可能會(huì)提供一個(gè)用于保存內(nèi)部狀態(tài)(共享屬性)的空間
·Flyweight Factory:創(chuàng)建Flyweight的工廠類(lèi),創(chuàng)建后將其保存到Flyweight Pool中
·Flyweight Pool:緩沖Flyweight對(duì)象的池,通常包含在工廠類(lèi)中 閱讀全文
設(shè)計(jì)模式總結(jié)-Bridge模式
摘要: ·在抽象接口中包含了一個(gè)對(duì)行為接口的引用,這樣的話行為的操作將完全委托給行為接口完成,抽象類(lèi)無(wú)需關(guān)心。
·在抽象類(lèi)的繼承子類(lèi)中,調(diào)用了行為類(lèi)的子類(lèi)來(lái)實(shí)現(xiàn)不同的行為。此時(shí)抽象類(lèi)的子類(lèi)中只知道屬性,但不知道具體的行為實(shí)現(xiàn),實(shí)現(xiàn)了概念與行為的分離
·在行為類(lèi)的繼承子類(lèi)中,只知道執(zhí)行相應(yīng)的動(dòng)作,但不知道具體的屬性,實(shí)現(xiàn)了行為和概念的分離 閱讀全文
·在抽象類(lèi)的繼承子類(lèi)中,調(diào)用了行為類(lèi)的子類(lèi)來(lái)實(shí)現(xiàn)不同的行為。此時(shí)抽象類(lèi)的子類(lèi)中只知道屬性,但不知道具體的行為實(shí)現(xiàn),實(shí)現(xiàn)了概念與行為的分離
·在行為類(lèi)的繼承子類(lèi)中,只知道執(zhí)行相應(yīng)的動(dòng)作,但不知道具體的屬性,實(shí)現(xiàn)了行為和概念的分離 閱讀全文
設(shè)計(jì)模式總結(jié)-Decorator模式(二)
摘要: Decorator模式的實(shí)際應(yīng)用--動(dòng)態(tài)黑名單過(guò)濾 閱讀全文
設(shè)計(jì)模式總結(jié)-Decorator模式
摘要: Decrator模式的適用場(chǎng)合:
1).在運(yùn)行時(shí)刻由用戶動(dòng)態(tài)決定加入的方式和時(shí)機(jī),無(wú)法在編譯期間決定
2).需要改變的行為太多,用繼承會(huì)導(dǎo)致復(fù)雜性的增加 閱讀全文
1).在運(yùn)行時(shí)刻由用戶動(dòng)態(tài)決定加入的方式和時(shí)機(jī),無(wú)法在編譯期間決定
2).需要改變的行為太多,用繼承會(huì)導(dǎo)致復(fù)雜性的增加 閱讀全文
設(shè)計(jì)模式總結(jié)-Composite模式(一)
摘要: Composite模式的特點(diǎn):
·Composite模式一般都有一個(gè)抽象類(lèi)或接口來(lái)表示最基本的構(gòu)件。
·Composite模式一般都由兩類(lèi)對(duì)象構(gòu)成:表示單個(gè)元素的對(duì)象(Primitive)和表示多個(gè)元素組合的對(duì)象(Composite)
·Composite模式下Primitive和Composite對(duì)象都繼承或?qū)崿F(xiàn)上層接口或父類(lèi)
·Composite模式下每個(gè)構(gòu)件都含有三個(gè)基礎(chǔ)方法:add(構(gòu)件)、remove(構(gòu)件)、iterator()
·Composite對(duì)象含有一個(gè)用來(lái)保存其下所有基礎(chǔ)元素的的集合,例如:Vector,ArrayList,HashMap
·Composite對(duì)象的方法被調(diào)用時(shí)一般都會(huì)引起其下所有基礎(chǔ)元素相同方法的調(diào)用,即遞歸調(diào)用。 閱讀全文
·Composite模式一般都有一個(gè)抽象類(lèi)或接口來(lái)表示最基本的構(gòu)件。
·Composite模式一般都由兩類(lèi)對(duì)象構(gòu)成:表示單個(gè)元素的對(duì)象(Primitive)和表示多個(gè)元素組合的對(duì)象(Composite)
·Composite模式下Primitive和Composite對(duì)象都繼承或?qū)崿F(xiàn)上層接口或父類(lèi)
·Composite模式下每個(gè)構(gòu)件都含有三個(gè)基礎(chǔ)方法:add(構(gòu)件)、remove(構(gòu)件)、iterator()
·Composite對(duì)象含有一個(gè)用來(lái)保存其下所有基礎(chǔ)元素的的集合,例如:Vector,ArrayList,HashMap
·Composite對(duì)象的方法被調(diào)用時(shí)一般都會(huì)引起其下所有基礎(chǔ)元素相同方法的調(diào)用,即遞歸調(diào)用。 閱讀全文
設(shè)計(jì)模式總結(jié)-Adapter模式
摘要: 從上面的四種方式來(lái)看,方式二最簡(jiǎn)單也最常用,方式三最靈活,方式一和四有相同的地方就是都繼承了其中的某一個(gè)類(lèi),這樣就限制了適配器的子類(lèi)不能再繼承其它的功能父類(lèi)了,不同的地方是方式一使用委托的方式來(lái)完成類(lèi)B的功能,而方式四則自己實(shí)現(xiàn)了接口的方法。 閱讀全文
設(shè)計(jì)模式總結(jié)-Proxy模式
摘要: Proxy類(lèi)具有幾個(gè)特點(diǎn)
·Proxy類(lèi)一般都實(shí)現(xiàn)或繼承了后臺(tái)對(duì)象接口或抽象類(lèi),在其中實(shí)現(xiàn)了后臺(tái)對(duì)象接口的方法,這樣外界和代理類(lèi)打交道的客戶端看到的是和后臺(tái)對(duì)象一樣的接口。根本不知道自己在和代理對(duì)象打交道。
·Proxy類(lèi)一般都含有一個(gè)后臺(tái)對(duì)象作為其成員,因?yàn)榇眍?lèi)需要在其實(shí)現(xiàn)接口的方法中調(diào)用后臺(tái)對(duì)象的真正方法來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯。
·Proxy類(lèi)一般都需要包含一個(gè)能夠驗(yàn)證用戶請(qǐng)求是否合法的對(duì)象,如上例中的ForumPermisssions類(lèi),作為轉(zhuǎn)發(fā)或拒絕用戶請(qǐng)求的判斷依據(jù) 閱讀全文
·Proxy類(lèi)一般都實(shí)現(xiàn)或繼承了后臺(tái)對(duì)象接口或抽象類(lèi),在其中實(shí)現(xiàn)了后臺(tái)對(duì)象接口的方法,這樣外界和代理類(lèi)打交道的客戶端看到的是和后臺(tái)對(duì)象一樣的接口。根本不知道自己在和代理對(duì)象打交道。
·Proxy類(lèi)一般都含有一個(gè)后臺(tái)對(duì)象作為其成員,因?yàn)榇眍?lèi)需要在其實(shí)現(xiàn)接口的方法中調(diào)用后臺(tái)對(duì)象的真正方法來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯。
·Proxy類(lèi)一般都需要包含一個(gè)能夠驗(yàn)證用戶請(qǐng)求是否合法的對(duì)象,如上例中的ForumPermisssions類(lèi),作為轉(zhuǎn)發(fā)或拒絕用戶請(qǐng)求的判斷依據(jù) 閱讀全文
設(shè)計(jì)模式總結(jié)-單例模式
摘要: 在多線程環(huán)境下,我們無(wú)法保證一個(gè)方法能夠持續(xù)運(yùn)行到結(jié)束,其他線程的方法才開(kāi)始運(yùn)行。因而可能存在這樣一種情形:兩個(gè)線程幾乎同時(shí)嘗試初始化單例類(lèi)。假設(shè)第一個(gè)方法發(fā)現(xiàn)單例為空,而第二個(gè)方法在此刻開(kāi)始運(yùn)行,它也會(huì)發(fā)現(xiàn)該單例為空。接下來(lái),這兩個(gè)方法都將對(duì)該單例進(jìn)行初始化 閱讀全文
設(shè)計(jì)模式總結(jié)-Builder模式(二)
摘要: 使用Builder模式的最佳場(chǎng)合應(yīng)該是:對(duì)象的構(gòu)建過(guò)程長(zhǎng)或復(fù)雜、構(gòu)建對(duì)象所需的全部參數(shù)無(wú)法在一開(kāi)始就完全獲得,必須通過(guò)一步步的交互過(guò)程來(lái)獲取。例如:通過(guò)Web頁(yè)面的輸入或用戶選擇來(lái)構(gòu)建所需對(duì)象 閱讀全文
設(shè)計(jì)模式總結(jié)-Builder模式
摘要: 所以我們可以將Builder模式分成四個(gè)組成部分:·產(chǎn)品:public interface Product·零件:Public interface Part·生產(chǎn)零件的過(guò)程:public interfact Builder·組裝零件的過(guò)程:public class Director 閱讀全文
設(shè)計(jì)模式總結(jié)-Prototype模式
摘要: Prototype模式最適用的場(chǎng)合應(yīng)該是:當(dāng)幾個(gè)對(duì)象的類(lèi)僅在屬性上存在一點(diǎn)差異,而行為上完全相同時(shí)。可以在復(fù)制一個(gè)原型對(duì)象后,對(duì)其屬性進(jìn)行細(xì)小的微調(diào),從而實(shí)現(xiàn)定制化的目的。 閱讀全文
設(shè)計(jì)模式總結(jié)-工廠模式
摘要: 從上面的4種方式來(lái)看,方式1~3適合于工廠所產(chǎn)生的對(duì)象都是屬于同一個(gè)父類(lèi)型的,而方式4則適合于工廠需要產(chǎn)生多種類(lèi)型的產(chǎn)品,而每一種類(lèi)型的產(chǎn)品下面又有多個(gè)子類(lèi)型的情況。
閱讀全文
閱讀全文
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | |||
15 | 16 | 17 | 18 | 19 | 20 | 21 | |||
22 | 23 | 24 | 25 | 26 | 27 | 28 | |||
29 | 30 | 1 | 2 | 3 | 4 | 5 |
常用鏈接
留言簿(21)
隨筆分類(lèi)
- J2EE 框架(9)
- J2EE基礎(chǔ)(4)
- J2SE(43)
- Java 工具(5)
- Oracle Concept(4)
- Oracle SQL/PLSQL(9)
- Oracle 開(kāi)發(fā)(13)
- Oracle 管理(4)
- Oracle 調(diào)優(yōu)
- Oracle 錯(cuò)誤診斷
- RoR(19)
- UML(3)
- Unix / Linux(13)
- Web基礎(chǔ)(19)
- 其它技術(shù)(7)
- 感悟(3)
- 雜項(xiàng)(7)
- 架構(gòu)與性能(8)
- 模式與重構(gòu)(19)
- 灌水(8)
- 電影與音樂(lè)(16)
- 走過(guò)的路(1)
- 軟件過(guò)程與軟件方法(3)
- 陽(yáng)光戶外(2)
- 項(xiàng)目管理(36)
隨筆檔案
- 2012年2月 (3)
- 2011年11月 (4)
- 2011年10月 (1)
- 2011年9月 (2)
- 2011年8月 (2)
- 2011年7月 (5)
- 2011年6月 (3)
- 2011年5月 (1)
- 2011年4月 (1)
- 2011年3月 (3)
- 2011年1月 (1)
- 2010年12月 (1)
- 2010年11月 (5)
- 2010年10月 (3)
- 2010年9月 (1)
- 2010年7月 (1)
- 2010年6月 (1)
- 2010年5月 (4)
- 2010年4月 (9)
- 2010年3月 (19)
- 2010年2月 (8)
- 2010年1月 (3)
- 2009年12月 (34)
- 2009年11月 (1)
- 2009年10月 (2)
- 2009年7月 (4)
- 2009年6月 (5)
- 2009年5月 (3)
- 2009年4月 (2)
- 2009年3月 (1)
- 2009年2月 (5)
- 2009年1月 (5)
- 2008年12月 (13)
- 2008年11月 (4)
- 2008年10月 (1)
- 2008年9月 (6)
- 2008年8月 (5)
- 2008年7月 (3)
- 2008年6月 (31)
- 2008年5月 (10)
- 2008年4月 (9)
- 2008年3月 (7)
- 2008年2月 (4)
- 2008年1月 (19)
BlogJava熱點(diǎn)博客
好友博客
搜索
最新評(píng)論

- 1.?re: 【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄](méi)
- 666666666666666666666這幾天正在做個(gè)類(lèi)似工程編碼出現(xiàn)錯(cuò)誤
- --李
- 2.?re: 【Java基礎(chǔ)專題】IO與文件讀寫(xiě)---使用Apache commons IO簡(jiǎn)化文件讀寫(xiě)
- 不錯(cuò)
- --阿斯蘭
- 3.?re: 【Java基礎(chǔ)專題】編碼與亂碼(03)----String的toCharArray()方法
- 多謝分享
- --thx
- 4.?re: 【Java基礎(chǔ)專題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換
- 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
- --karl
- 5.?re: 【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄](méi)
- 謝謝,幫了我大忙!
- --小龍