




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、面向接口的編程Itrator Proxy & Prototype有一個(gè)數(shù)據(jù)列表DataList,其基本類型是3維向量ThreeD。假設(shè)有三個(gè)外部對象A,B,C,分別對其x、y、z維度感興趣,希望訪問DataList在相應(yīng)維度的數(shù)據(jù)并進(jìn)行處理 1)用Java語言實(shí)現(xiàn)該數(shù)據(jù)列表的數(shù)據(jù)結(jié)構(gòu) 2)請定義其對外的數(shù)據(jù)接口 分別使用迭代器與ProxyOCPDecorator 用Decorator模式解決問題Extension:Border( Plain, 3D, Fancy)ScrollBar( Horiz, Vert)abstract class Decorator extends VisualComp
2、onent VisualComponent vc; Decorator(VisualComponent vc) this.vc = vc; void draw() vc.draw(); void resize() vc.resize();abstract class Border extends Decorator void draw() super.draw(); drawBorder(); abstract void drawBorder();class PlainBorder extends Border void drawBorder() .Information HidingFaad
3、e Strategy比較facade與controller(collaboration design)的異同 比較facade與collaboration desigsn的異同Collaboration有三種方式,一種是委托,一種是集成式,一種式分散式。Faade 類似于collaboration 中的controller,不同的是,faade 更多關(guān)注的是區(qū)別對待,而controller 主要是為了決策。比較Facade. Mediator,在collaboration design方面異同:Faade mediator collaboration design 目標(biāo)都是解耦,方式與強(qiáng)調(diào)的方
4、面不同。Faade 是將外界與內(nèi)界之間進(jìn)行解耦,而mediator 強(qiáng)調(diào)的是系統(tǒng)內(nèi)部的。collaboration design 強(qiáng)調(diào)的是決策。相同:它們自己不進(jìn)行一些邏輯處理,都只是進(jìn)行一些任務(wù)轉(zhuǎn)發(fā)的功能它們都是對兩個(gè)模塊或外部和內(nèi)部進(jìn)行解耦都是抽出來的一層,屏蔽了底層的接口不同:facade 主要關(guān)注的是模塊之間的解耦和信息隱藏,為一個(gè)子系統(tǒng)提供一個(gè)簡單的,外在的接口,任意兩個(gè)之間,只要有一些解耦的需求,都可以用 facade 。而 controller 的目的是對應(yīng)用戶需求,職責(zé)分配,主要處理當(dāng)來了一個(gè)請求或什么的,具體要分配給那個(gè)對象取。(yy)facade由于是為了模塊的解耦,在兩個(gè)
5、基本的類之間做一個(gè) facade 是沒有意義的。而 controller 目的是為了讓用戶的請求和處理之間彼此獨(dú)立,所以可以存在兩個(gè)類之間有一個(gè)controller。在策略模式中, 為什么使用“聚合”而不是 “關(guān)聯(lián)”關(guān)系?聚合可以說是一種比較強(qiáng)的關(guān)聯(lián),聚合指出在對象 A 中需要有 B 的應(yīng)用,而關(guān)聯(lián)僅僅是一種使用關(guān)系。由于關(guān)聯(lián)沒有規(guī)定 A 中有B的引用,那么如果 策略模式使用關(guān)聯(lián)來實(shí)現(xiàn),那么就無法解決綜合使用多個(gè)策略的問題,它要么使用一個(gè)策略,要么策略的個(gè)數(shù)是確定的。 ?Common and VariationState & Brige!策略樹的應(yīng)用如果一個(gè)對象集之間除共性外,有超過個(gè)的差異行
6、為,如何處理? 每個(gè)行為都封裝出去,兩棵策略樹如果一個(gè)對象集的部分行為組存在差異性,如何處理? 把行為組放在策略中如果一個(gè)對象集的部分屬性(以及依賴于這些屬性的方法)存在差異性,如何處理?把這些屬性和方法放在策略中 如果一個(gè)對象集的一個(gè)行為需要協(xié)作對象來完成,但是它們的協(xié)作對象存在差異性,如何處理?在協(xié)作對象上加上一個(gè)adapter組成策略(Command Pattern)前四個(gè)都是將變化的部分移出去,采用策略模式。如果一個(gè)對象集的行為因?yàn)閷傩缘娜≈刀嬖诓町愋?,如何處理?將與其他對象連接的部分分離出去;每個(gè)行為都封裝出去;保留接口,其他全部做成策略;比較strategy 與 state1
7、of N or M of N?策略模式用在M of N 的情況下;狀態(tài)模式也可以,但是通常用在1 of N 的情況下。Who control the changing?誰控制修改是不固定的,誰擁有改變規(guī)則就控制修改。參考信息專家,將職責(zé)分配給擁有足夠的信息去完成整個(gè)職責(zé)的類。例如,狀態(tài)模式:Context變量放在哪個(gè)里面,哪個(gè)就可以控制修改。Context變量放在哪個(gè)里面,哪個(gè)就可以控制修改。(下圖舉例標(biāo)出了Context類型變量可放的位置) How to change?Fixed rules or table-driven (configuration files)按實(shí)際情況:如果需求可以固
8、定為固定的規(guī)則,則用fixed rules;如果是外部控制需求改變,則是table-drivenCreating and destroying policy?視具體情況而定,一般是在ref那里創(chuàng)建比較狀態(tài)和策略在狀態(tài)模式中,狀態(tài)的變化是有對象的內(nèi)部條件決定,外界只需關(guān)心其接口,不必關(guān)心其狀態(tài)對象的創(chuàng)建和轉(zhuǎn)化;而策略模式里面,采取何種策略由外部條件決定的。其實(shí),兩種模式的關(guān)鍵不同在于,狀態(tài)模式注重給客戶對象提供在不同狀態(tài)間切換不同的行為。重在切換;而策略模式注重給客戶對象提供多種不同的選擇,一般來說,用戶不會(huì)經(jīng)常切換來切換去。前者是指用context來操作不同狀態(tài)類的自動(dòng)轉(zhuǎn)換,或者是指用具體某個(gè)
9、狀態(tài)的某個(gè)event來自動(dòng)實(shí)現(xiàn)各個(gè)狀態(tài)之間的跳轉(zhuǎn)。在現(xiàn)實(shí)世界中,策略(如促銷一種商品的策略)和狀態(tài)(如同一個(gè)按鈕來控制一個(gè)電梯的狀態(tài),又如手機(jī)界面中一個(gè)按鈕來控制手機(jī))是兩種完全不同的思想。當(dāng)我們對狀態(tài)和策略進(jìn)行建模時(shí),這種差異會(huì)導(dǎo)致完全不同的問題。例如,對狀態(tài)進(jìn)行建模時(shí),狀態(tài)遷移是一個(gè)核心內(nèi)容;然而,在選擇策略時(shí),遷移與此毫無關(guān)系。另外,策略模式允許一個(gè)客戶選擇或提供一種策略,而這種思想在狀態(tài)模式中完全沒有“Context decide changing of ConcreteState object ”與“ ConcreteState decide changing of Concrete
10、State object”有何不同?前者是指用context來操作不同狀態(tài)類的自動(dòng)轉(zhuǎn)換,后者是指用具體某個(gè)狀態(tài)的某個(gè)event來自動(dòng)實(shí)現(xiàn)各個(gè)狀態(tài)之間的跳轉(zhuǎn)。State 是由自己控制變化的,而 strategy 通常是由 context 控制變化的。State 自己控制變化的過程是隱式的,外部不知道現(xiàn)在的狀態(tài)和下一個(gè)狀態(tài)將要是什么,而由 context 控制變化的時(shí)候,是能夠控制變化的。通常 Strategy 都是完成的同一個(gè)功能,State 不一定。使用Bridge Pattern實(shí)現(xiàn)一個(gè)畫圖程序的主體框架 最初問題方案1橋接模式!圖形:點(diǎn)、線、矩形、圓線形:實(shí)線、虛線、雙線線粗細(xì):1x、2x
11、、4x顏色:RGB (Bridge非常典型的只有Interface)暴露給Client的是不變的接口,Implementor給出了一些共同操作的接口,但是Abstraction可以有不同的實(shí)現(xiàn),實(shí)現(xiàn)也有不同的實(shí)現(xiàn)。接口是共性,而實(shí)現(xiàn)是差異性,利用了繼承和聚合。 public class Bridge public static void main(String args) abstract class Shape private DrawImpl impl; public Shape(DrawImpl impl) this.impl = impl; protected void drawPoi
12、nt(int px, int color) impl.drawPoint(px, color); protected void drawLine(int px, int color) impl.drawLine(px, color); protected void drawRect(int px, int color) impl.drawRect(px, color); protected void drawCircle(int px, int color) impl.drawCircle(px, color); public abstract void draw(int px, int co
13、lor);class Circle extends Shape public Circle(DrawImpl impl) super(impl); public void draw(int px, int color) drawCircle(px, color);.interface DrawImpl public void drawPoint(int px, int color); public void drawLine(int px, int color); public void drawRect(int px, int color); public void drawCircle(i
14、nt px, int color);class SolidDrawImpl public void drawPoint(int px, int color) public void drawLine(int px, int color) public void drawRect(int px, int color) public void drawCircle(int px, int color) 間接(Decoupling)GRASPDelegate Faade Proxy AdapterRuntime RegistrationObserver Command MVC與真正自實(shí)現(xiàn)的Event
15、 Style相比,Observer Pattern的不同在哪里? Event Style 中需要管理多種 Event 事件;而 ObserverPattern 只通常只需要管理一種,即自己的變化Event Style 中 EventRoute 有儲存關(guān)于 Event 和 ObserverList 的一個(gè) Dictionary;Observer 中 Subject 只有一個(gè)列表Event Style 中 EventRoute 只是一個(gè)事件路由,沒有除了一個(gè) Dictionary 沒有其他的屬于自己的信息;而 Observer 中的 Subject 包含有 Subject 信息Event Styl
16、e 中的事件發(fā)起的原因是第三方觸發(fā)了事件;而 Observer 中 update 觸發(fā)的原因是 Subject 自己的數(shù)據(jù)發(fā)生了變化,雖然是由于第三方的修改,但是時(shí)間是由自己觸發(fā)的如果眾多Observer的接口不相同怎么辦? 不都是update接口,甚至不是同一種類型使用一個(gè)adapter使它們的接口統(tǒng)一!用observer編寫程序: Model: student(ID, name, birthday) View:View1: 顯示 ID+name View2:顯示ID+birthday View3:修改student的三個(gè)列 View12為observer,model為subject實(shí)現(xiàn)每次
17、view3中實(shí)現(xiàn)修改后 View12自動(dòng)更新Data TypesDecorator Entity VOCreationSingleton Factory Ab-Factory Factory-Method以singleton為基礎(chǔ),編寫程序解決上述問題 /實(shí)例的狀態(tài)Public enum Status Busy,/被客戶占用Free/空閑態(tài)public class SingletonN private Status status;private static ArrayList instances;public final static int N = 3;private SingletonN
18、() status = Status.Free;public static SingletonN getInstance() if (instances = null) instances = new ArrayList();for (int i = 0; i instances.size(); i+) if (instances.get(i).status = Status.Free) instances.get(i).status = Status.Busy;return instances.get(i);if (instances.size() N) SingletonN s = new SingletonN();s.status = Status.Busy;instances.add(s);return s;return null;/表示沒有實(shí)例可以用public static boolean destory(SingletonN s) if (instances != null) for (int i = 0; i instances.size(); i+) if (instances.get(i).equals(s) instances.get(i).status = Status.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大型商場物業(yè)管理服務(wù)合同
- 耳機(jī)對耳朵的害處的研究報(bào)告
- 2025年上半年四川遂寧產(chǎn)業(yè)投資集團(tuán)有限公司招聘4人筆試參考題庫附帶答案詳解
- 2025廣西廣投產(chǎn)業(yè)鏈服務(wù)集團(tuán)有限公司招聘4人筆試參考題庫附帶答案詳解
- 2025年浙江省國貿(mào)集團(tuán)資產(chǎn)經(jīng)營有限公司招聘9人筆試參考題庫附帶答案詳解
- 2024年稀有稀土金屬壓延加工材項(xiàng)目資金需求報(bào)告
- 2025年上半年寶雞麟游縣國家稅務(wù)局招考辦稅服務(wù)廳派遣制工作人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025內(nèi)蒙古建安發(fā)展投資集團(tuán)有限公司招聘14人筆試參考題庫附帶答案詳解
- 2025年上半年安徽蕪湖市市屬國企業(yè)招聘74人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽省馬鞍山市雨山區(qū)政府部門招聘派遣制人員19人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 二級精神病醫(yī)院評審標(biāo)準(zhǔn)實(shí)施細(xì)則
- 機(jī)電總工崗位職責(zé)
- 數(shù)據(jù)管理(培訓(xùn)課件)
- 唇腺活檢的疾病查房課件
- ICD-9-CM-3手術(shù)與操作國家臨床版亞目表
- 辦公耗材采購 投標(biāo)方案(技術(shù)方案)
- 智能工廠物流系統(tǒng)規(guī)劃
- 家長會(huì)課件:六年級數(shù)學(xué)家長會(huì)老師課件
- avrt房室折返型心動(dòng)過速
- 全國青少年機(jī)器人技術(shù)等級考試一二級講稿課件-參考
- 大學(xué)計(jì)算機(jī)概論(Windows10+Office2016)PPT完整全套教學(xué)課件
評論
0/150
提交評論