Java模式(工廠模式、代理模式、裝飾模式)_第1頁
Java模式(工廠模式、代理模式、裝飾模式)_第2頁
Java模式(工廠模式、代理模式、裝飾模式)_第3頁
Java模式(工廠模式、代理模式、裝飾模式)_第4頁
Java模式(工廠模式、代理模式、裝飾模式)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Java模式

工廠模式、代理模式、裝飾模式工廠模式簡單工廠模式工廠方法模式抽象工廠模式簡單工廠模式簡單工廠模式又稱為靜態(tài)工廠方法模式。簡單工廠模式就是一個工廠類根據(jù)傳入的參量決定創(chuàng)立出哪一種產(chǎn)品類的實例。其結(jié)構(gòu)如下所示:簡單工廠模式結(jié)構(gòu)工廠類角色〔Creator〕:擔任這個角色的是簡單工廠模式的核心,含有與應(yīng)用緊密相關(guān)的商業(yè)邏輯。工廠類在客戶端的調(diào)用下直接創(chuàng)立產(chǎn)品對象,它往往由一個具體的Java類實現(xiàn)。抽象產(chǎn)品角色〔Product〕:擔任這個角色的是簡單工廠所創(chuàng)立的對象的父類,或它們共同擁有的接口。抽象產(chǎn)品角色可以用一個Java接口或者Java抽象類實現(xiàn)。具體產(chǎn)品角色〔ConcreteProduct〕:工廠類所創(chuàng)立的對象就是此角色的實例。在java中由一個具體類實現(xiàn)。簡單工廠模式的優(yōu)缺點優(yōu)點: 模式的核心是工廠類。這個類含有必要的邏輯判斷,可以決定在什么時候創(chuàng)立哪個產(chǎn)品類的實例。而客戶端那么可以直接免除創(chuàng)立產(chǎn)品對象的責(zé)任,而僅僅負責(zé)“消費”產(chǎn)品。簡單工廠模式通過這個做法實現(xiàn)了對責(zé)任的分割。缺點: 工廠類集中了所有的產(chǎn)品創(chuàng)立邏輯,如果這個全能類不能正常工作了的話,整個系統(tǒng)都會受到影響。 當產(chǎn)品類有不同的接口各類時,工廠類需要判斷在什么時候創(chuàng)立某種產(chǎn)品,這種判斷邏輯混合在一起,使得系統(tǒng)在將來進行功能擴展時較為困難。 由于簡單工廠模式使用靜態(tài)方法做為工廠方法,而靜態(tài)方法無法由子類繼承,因此工廠角色無法形成基于繼承的等級結(jié)構(gòu)。 只在有限的程度上支持“開-閉”原那么;添加新產(chǎn)品時對于消費者角色成立,但是對于工廠角色不成立;工廠方法模式結(jié)構(gòu)工廠方法模式的用意是定義一個產(chǎn)品對象的工廠接口,將實際工作推到子類中。工廠方法模式結(jié)構(gòu)

抽象工廠角色:這是工廠方法模式的核心,它與應(yīng)用程序無關(guān)。是具體工廠角色必須實現(xiàn)的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現(xiàn)。具體工廠角色:它含有和具體業(yè)務(wù)邏輯有關(guān)的代碼。由應(yīng)用程序調(diào)用以創(chuàng)立對應(yīng)的具體產(chǎn)品的對象。抽象產(chǎn)品角色:它是具體產(chǎn)品繼承的父類或者是實現(xiàn)的接口。在java中一般有抽象類或者接口來實現(xiàn)。具體產(chǎn)品角色:具體工廠角色所創(chuàng)立的對象就是此角色的實例。在java中由具體的類來實現(xiàn)。工廠方法模式與簡單工廠模式工廠方法模式的核心是一個抽象工廠類,而簡單工廠模式的核心是一個具體類;工廠方法模式可以允許很多具體工廠類從抽象工廠類中將創(chuàng)立行為繼承下來,從而可以成為多個簡單工廠模式的綜合;與簡單工廠模式一樣的是,工廠返回的數(shù)據(jù)類型是一個抽象類型,而不是一個具體的產(chǎn)品類型,而客戶端也不必知道所得到的產(chǎn)品的真實類型。這種多態(tài)性的設(shè)計將工廠類選擇創(chuàng)立哪一個產(chǎn)品對象、如何創(chuàng)立這個對象的細節(jié)完全封閉在具體工廠內(nèi)部;工廠方法模式中具體工廠類都有共同的接口,或者都有共同的抽象父類;如果系統(tǒng)需要參加一個新的產(chǎn)品,那么所需要的就是向系統(tǒng)中參加一個這個產(chǎn)品類以及它所對應(yīng)的工廠類,沒有必要修改客戶端,也沒有必要修改抽象工廠角色或者其他已有的其他具體工廠角色,對于增加新的產(chǎn)品而言,工廠方法模式完全支持“開-閉”原那么;抽象工廠模式產(chǎn)品族:位于不同產(chǎn)品等級結(jié)構(gòu)中,功能相關(guān)聯(lián)的產(chǎn)品組成的家族;抽象工廠模式的用意為:給客戶端提供一個接口,可以創(chuàng)立多個產(chǎn)品族中的產(chǎn)品對象;而且使用抽象工廠模式還要滿足一下條件:

1)系統(tǒng)中有多個產(chǎn)品族,而系統(tǒng)一次只可能消費其中一族產(chǎn)品。

2)同屬于同一個產(chǎn)品族的產(chǎn)品以其使用。抽象工廠模式的結(jié)構(gòu)開—閉原那么增加新的產(chǎn)品族在產(chǎn)品等級結(jié)構(gòu)不變的情況下,增加新的產(chǎn)品族,就意味著在每一個產(chǎn)品等級結(jié)構(gòu)中增加新的產(chǎn)品角色。由于工廠等級結(jié)構(gòu)是與產(chǎn)品等級結(jié)構(gòu)平行的,因此當增加新的產(chǎn)品族時,設(shè)計師只需要向系統(tǒng)中參加新的具體工廠類就可以了,沒有必要修改現(xiàn)有的工廠角色和產(chǎn)品角色。因此,在增加新產(chǎn)品族時,抽象工廠模式是支持“開—閉”原那么的;增加新的等級結(jié)構(gòu)在產(chǎn)品族的數(shù)目不變的情況下,增加新和產(chǎn)品等級結(jié)構(gòu),就需要修改所有的工廠角色,給每一個工廠類增加一個新的工廠方法。因此,對于增加新的產(chǎn)品等級結(jié)構(gòu),抽象工廠模式是不支持“開—閉”原那么的;代理模式代理是一種常用的設(shè)計模式,其目的就是為其他對象提供一個代理以控制對某個對象的訪問。代理類負責(zé)為委托類預(yù)處理消息,過濾消息并轉(zhuǎn)發(fā)消息,以及進行消息被委托類執(zhí)行后的后續(xù)處理。為了保持行為的一致性,代理類和委托類通常會實現(xiàn)相同的接口,所以在訪問者看來兩者沒有絲毫的區(qū)別。通過代理類這中間一層,能有效控制對委托類對象的直接訪問,也可以很好地隱藏和保護委托類對象,同時也為實施不同控制策略預(yù)留了空間,從而在設(shè)計上獲得了更大的靈活性。代理模式的結(jié)構(gòu)抽象角色:聲明真實對象和代理對象的共同接口;代理角色:代理對象角色內(nèi)部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時刻都能代替真實對象。同時,代理對象可以在執(zhí)行真實對象操作之前或之后,附加其他的操作,而不是單純的將調(diào)用傳遞給真實對象;真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。代理模式的時序客戶端向代理主題發(fā)出請求,代理主題在接到請求的同時,執(zhí)行了一個PreRequest()操作,才把請求傳遞給真實主題。在真實主題將請求返回后,代理主題又進行了PostRequest()操作,才將控制返回給客戶端。反射與動態(tài)代理三個類:Proxy、InvocationHandler、Method通過Proxy類中的newProxyInstance()方法可以在運行時間創(chuàng)立代理對象當系統(tǒng)有了一個代理對象之后,對原對象的方法調(diào)用會首先被分派給一個調(diào)用處理器〔InvocationHandler〕程序員可以在調(diào)用處理器的invoke()方法中截獲這個調(diào)用,進行額外的操作Java所提供的這一支持是建立在的反射(Reflection)的根底之上的裝飾模式裝飾模式以對客戶端透明的方式擴展對象的功能;裝飾模式可以在不使用創(chuàng)造更多子類的情況下,將對象的功能加以擴展;裝飾模式使用原來被裝飾的類的一個子類的實例,把客戶端的的調(diào)用委派到被裝飾類。裝飾模式的關(guān)鍵在于這種擴展完全是透明的;裝飾模式的結(jié)構(gòu)抽象角色(Component):給出一個抽象接口,以標準準備接收附加責(zé)任的對象;具體角色(ConcreteComponent):定義一個將要接收附加責(zé)任的類;裝飾角色(Decorator):持有一個抽象角色的實例,并定義一個與抽象角色接口一致的接口;具體裝飾角色(ConcreteDecorator):負責(zé)給抽

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論