![面向對象知識點整理_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af41.gif)
![面向對象知識點整理_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af42.gif)
![面向對象知識點整理_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af43.gif)
![面向對象知識點整理_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af44.gif)
![面向對象知識點整理_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af45.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<h1>第一章</h1>設計模式:解決反復出現(xiàn)的問題的設計經驗面向對象的方法:一種分析方法,設計方法和思維方法.出發(fā)點:使人們分析設計與實現(xiàn)一個系統(tǒng)的方法盡可能接近人們認識一個系統(tǒng)的方法.使描述問題的問題空間與解決問題的問題空間盡可能一致.基本思想:從現(xiàn)實世界中客觀存在的事物出發(fā)來建立軟件系統(tǒng).充分運用人類日常的思維方法.定義:是一種運用對象,類,繼承,封裝,聚合,關聯(lián),消息,多態(tài)性等概念來構造系統(tǒng)的軟件開發(fā)方法.主要特點:對象,屬性與服務,封裝,分類,繼承,聚合,消息,關聯(lián).程序設計思想的發(fā)展歷程:階段1:大型機,運算力弱,科學計算,計算密集,小型程序,順序程序,個體
2、工作階段2:外設發(fā)展,運算力增強,數據密集,大型程序,并發(fā)程序.程序,管理失控,難以控制程序復雜性.結構化程序設計:自頂向下,逐步求精.模塊化,使用子程序.階段3:微機.功能抽象困難,易變,分解結構隨意,重用性差.解決:面向現(xiàn)實,開發(fā)不變性.面向對象與結構化設計比較:復用性,問題依賴.傳統(tǒng)方法面向對象方法數據結構+算法以對象為中心組織數據屬性操作服務類型與變量類與對象函數調用消息傳送類型與子類型繼承構造類型整體-部分結構,聚合指針關聯(lián)面向對象是軟件方法學的返璞歸真階段4:網絡,分布計算,分布對象(COMBA,COM,RMI)面向對象發(fā)展歷程:1960s:Simula67,引入了類和繼承1970
3、s:CLU,并發(fā)Pascal,Ada,Modula-2,支持數據與操作的封裝Flex,類,對象,繼承Smalltalk-72,正式使用面向對象這個術語,設計方法正式形成.Simula-67->SmallTalk-80->C+->Java發(fā)展:從編程發(fā)展到設計,分析,發(fā)展到整個生命周期.幾乎覆蓋計算機軟件領域的所有分支.1990s后:UML,圖形化建模語言,為面向對象系統(tǒng)建立模型,具有靈活性,結構型圖和行為型圖設計模式:使系統(tǒng)更穩(wěn)定,易修改,擴展,理解,測試.三大類:創(chuàng)建型,結構型,行為型代理和團體:一個面向對象的程序是有一個相互作用的代理團體組成,這些代理被稱為對象.每一個對
4、象承擔一個角色.每一個對象都提供一種服務或者執(zhí)行一種動作,為其他對象服務.對象:對象是獨立存在的客觀事物,它由一組屬性和一組操作構成.屬性和操作是對象的兩大要素.屬性隱藏,操作共享.性質:封裝性,自治性,通信性,暫存性,永久性.復合對象:劃分,聚合部分/整體關系中有兩種方式,組合和聚合,組合是部分僅屬于一個整體,聚合整體可能有交叉.消息和方法:行為的啟動通過將消息傳遞給指定對象.如果接收了消息,就要接受消息的行為責任.消息傳遞與過程調用:指定的接受者,動態(tài)綁定.信息隱藏:不用知道具體細節(jié).責任:用責任描述行為,只管結果,不管方法.不干預原則:允許對象以任何他認為合適的不干涉其他對象的方式來完成
5、任務.類和實例:所有對象都是類的實例.響應方式由類的接收器來決定.類的所有對象使用同樣的方法響應相似的消息.對象都是類的實例,類是一組相似的對象.類是對象相關行為的存儲庫.類的層次:每一層次上都可以了解特定的信息,這些信息適用于所有較低層次.繼承:類被組織成單根的樹狀結構.與類實例相關的內存和行為都會被樹結構中的后代自動繼承.<s>繼承表達了對象的一般與特殊的關系.類可以被組織成一個有層次的繼承結構.子類繼承父類屬性.抽象父類指沒有具體實例,只用來產生子類泛化和特化的關系.</s>改寫:子類覆蓋父類的方法,相同名稱.方法綁定與改寫:接收器搜索并執(zhí)行相應的方法以響應給定的
6、消息.如果沒有匹配就向父類鏈搜索.多態(tài)性:一般類中定義的屬性和服務,特殊類中不改變名字,通過各自不同的實現(xiàn)具有不同的行為.OOP定義:1.一切皆對象.2.計算通過對象間相互通信,請求其他對象執(zhí)行動作來實現(xiàn).對象間通過發(fā)送和接收消息來通信.3.每個對象都有自己的內存,其中可能包括其他的對象.4.對象都是類的實例.5.類是對象相關行為的存儲庫.6.類被組織成有單個根節(jié)點的樹狀結構.<h1>第二章</h2>非面向對象編程:程序往往是面向過程或者面向數據的.這些程序中通常有可全訪問的數據及過程,由主程序或其子程序來控制及操作這些數據.程序每個部分都可以訪問全局數據,得到數據的一
7、部分,操作這些數據,然后在需要時保存修改.面向對象編程:程序被劃分為一組通信的對象.每個對象均封裝了某個概念所有行為及信息.功能和數據被分布在對象中,對象接收到消息作出相應動作并可能返回值給調用者.對象可以創(chuàng)建對象.面向對象語言:類的概念可以從建模角度及編程語言的角度來理解.類可以視為對象的模板.對象是類的實例.對象所屬的類定義了對象的數據類型,行為和責任.對象通過消息傳遞的方式通信并命令彼此進行動作.面向對象編程的有點:"智能"被分布在對象中,將數據保存于較小的可管理單元就相對比較容易.增加代碼的可讀性.可擴展性好,便于修改和維護.修改一個對象不會影響其他對象.重用十分容
8、易.<h3>第三章</h3>抽象:抽象是指對于一個過程或者一件制品的某些細節(jié)進行有目的的隱藏,以便突出其他方面.控制復雜性最重要的工具.抽象技術:每個抽象層次包括了某些信息,也忽略了某些信息.人們通常使用一些簡單的工具來建立,理解和管理復雜的系統(tǒng),其中最重要的技術被稱為抽象.抽象的層次:在典型的OOP中,有許多級抽象.更高層次的抽象部分地體現(xiàn)了面向對象程序面向對象的特征.1.團體:在最高級別上,程序被視為一個對象的團體,這些對象間相互作用完成共同的目標.程序員的團體,對象的團體.2.單元:把協(xié)同工作的對象組合到一個單元中.暴露一些特定的名稱,隱藏其他.3.CS:接口,處
9、理兩個獨立對象之間的交互.定義行為,但不描述實現(xiàn).4.服務實現(xiàn):考慮抽象行為的具體實現(xiàn)方式.5.具體實現(xiàn):關注執(zhí)行一個方法的具體操作實現(xiàn).確定正確的抽象級別:在軟件開發(fā)的早期,關鍵的問題就是確定合適的層次抽象,既不要忽略太多細節(jié),也不要包括太多細節(jié).形式:分治法,特殊化,不同視角.分治法:將一層劃分為多個組成部分.特殊化:一層分幾種.視角:對同一件物品提供不同的視角.服務視角:對接口的實現(xiàn)和劃分,不僅從高層的角度是設計易于理解,而且支持組件替換.接口只描述組件所提供的服務,不必描述技術.團體中的每個成員都對其他成員提供服務.成員必須協(xié)作才能完成任務.分類:組件數量變大時用分類來進行組織.組合:
10、有一個簡單部分構建復雜結構.特化分層:使用特殊化的層次來構建對象.非標準行為:面向對象的語言也需要一種機制來覆蓋從上一層繼承來的信息.繼承方式:是一種,有一個.模式:運用之前的經驗.廣泛應用于對象團體中成員之間的相互作用方式.抽象機制的發(fā)展歷史:過程->模塊->抽象數據類型->面向對象1.匯編語言:最早的抽象機制2.過程/函數:部分信息隱藏,命名空間擁擠,復用困難.3.模塊:解決名稱空間擁擠.提供了將名稱空間劃分成兩個部分的能力,公有和私有.模塊不允許實例化,<strong>實例化是一種能夠建立數據區(qū)域多份拷貝的能力.</strong>4.抽象數據類型
11、:定義抽象,創(chuàng)建多個實例.使用實例,知其提供操作,不必知道如何實現(xiàn).ADT(Abstract Data Type)通過抽象規(guī)范來定義.匹配一個或多個實現(xiàn)方式.5.以服務為中心:匯編:功能,模塊和ADT:數據,面向對象:服務.6.消息,繼承,多態(tài):ADT基礎上增加的新思想.<h1>第四章</h1>封裝:利用數據抽象進行編程.數據類型兩方面:外部用戶/實現(xiàn)者.可以避免重復代碼,保護類受到不必要的修改.概念:實例,實例變量,數據成員,數據字段.對象=狀態(tài)+行為.類的定義:可視性修飾符public,private,由程序員確定.慣例:類名ClassName,單詞首字母大寫.數據
12、字段private.使用setter,getter等訪問.SmallTalk中:無可視性修飾符,數據均private.聲明次序的建議:主要->次要.private在后.構造方法在前.類主題的不同:接口:不提供實現(xiàn),可以聲明變量,實例可以賦值給接口類型變量.屬性:Delphi,VB,C#包含屬性的概念.預定義:多個互相引用的類,Java全文掃描,C+向前定義.內部類:在一個類中定義另一個類.Java內部類被連接到外部類實例上,C+僅僅是命名手段,限制可視性.類的數據字段:靜態(tài)數據字段初始化.Java由靜態(tài)塊完成.C+中由基本數據類型表示的靜態(tài)數據字段可以在類的主題中進行初始化.或者在類外初
13、始化.靜態(tài)成員:實現(xiàn)對個對象間的數據共享.靜態(tài)函數:成員函數,不能訪問非靜態(tài).沒有this構造和析構函數不能是靜態(tài).<h1>第五章</h1>消息:對象接受多個消息,響應不同.同一消息不同對象,響應不同.廣播,選擇性響應.是對象間相互請求或協(xié)作的途徑.語法:接收器,選擇器,參數.響應隨接收器不同而不同.靜態(tài)類型語言/動態(tài)類型語言(強類型/弱類型,考試的時候不知道這樣寫對不對)強類型變量有類型屬性,編譯期檢查.高效.弱類型變量沒有類型屬性,編譯期不檢查.靈活.強類型:編譯時做出內存分配決定.控制類型錯誤.偽變量:this,current,self,好像在使用同類的實例.對象
14、的創(chuàng)建:聲明與初始化結合.聲明與創(chuàng)建分離.對象數組的創(chuàng)建:包括創(chuàng)建數組,創(chuàng)建數組包含的對象.C+使用默認構造函數初始化.Java需要單獨創(chuàng)建對象.內存回收:使用new創(chuàng)建-堆內存.堆內存沒有綁定在過程的入口和出口處.1.顯式回收:C+/Object Pascal:delete/free2.內存回收機制:Java/C#/SmallTalk:監(jiān)控對象操作,對象不再使用時自動回收,通常在內存將要耗盡時工作.付出額外代價,但是可以避免使用已釋放的內存,避免耗盡內存.實現(xiàn):確保動態(tài)分配的內存對象都有一個指定的屬主.引用計數:引用共享對象的指針的計數值.內存分配策略:靜態(tài).堆式.棧式.靜態(tài):在編譯時就能確
15、定每個數據目標在運行時刻的存儲空間需求.不支持可變數據結構,遞歸,嵌套.棧式:有一個類似于堆棧的運行棧實現(xiàn),需求完全未知,進入模塊時必須知道程序模塊所需的數據區(qū)大小.按照先進后出的原則進行分配.堆式:可以在前兩個都不確定時使用,由大片可利用塊和空閑塊組成.可以按照任意順序分配和釋放.構造函數:初始化新創(chuàng)建對象.確保初始化錢不會被使用,防多次調用.Java/C+:名稱,參數Java/C#中數據字段可以初始化為特定的數值.可以重載.缺省構造函數即無參構造函數.C+中的初始化器:public:playing_card(Suit is, int ir):suit(is),rank(ir).用于對象成員
16、的初始化和子類對父類的初始化.C+類規(guī)范:缺省構造函數,拷貝構造函數,賦值操作符,析構函數.常量初始化:Java:final變量可直接初始化或者在構造函數中初始化.C+在初始化器中初始化.const vs final:const:常量,不允許改變.final:斷言不會重新賦值.析構函數:C+:釋放對象時自動調用.作為對象的類:Java,SmallTalk中類本身就是對象,具有創(chuàng)建實例,返回類名等功能.全對象系統(tǒng):1.類是對象.對象產生的兩種基本方式:一種是以原型對象為基礎產生新的對象.一種是以類為基礎.<strong>(原型也是一種對象)</strong>原型模型企圖通
17、過一個有代表性的對象為基礎產生各種新的對象.元類模型:類本身也是一種其他類的對象.Java和C+基于類的對象模型.JavaScript貌似基于原型.SmallTalk基于元類.SmallTalk的元類系統(tǒng):1.根類Object.2.每個類是其元類的實例.3.每個元類是類Meta的實例.4.每個元類是類Class的派生類.元類為語言提供了一個方法:集合類的特定性為.類首先不是作為Class的實例,而是元類的實例,元類繼承自Class,元類得到了Class的行為,也提供了定義特定行為的空間.SmallTalk的類庫及元體系結構:類中描述對象的個體性質:實例屬性.實例方法.元類中描述對象的公共性質:
18、類屬性,類方法元類是描述類的類,也是對象.類的繼承關系與相應元類的繼承關系是平行的.優(yōu)點:概念上一致:對象就可以表述系統(tǒng)中所有成分.改善程序設計環(huán)境(類成為運行時一部分)繼承更規(guī)范.反射和內省:程序在運行過程中了解自身的能力.分類:獲取當前計算狀態(tài)的特征.增加新的行為.類對象:反射工具都始于一個對象.類是Class類的實例.通常包括類名稱,類實例以及創(chuàng)建新實例的能力.常有功能不贅述.檢測對象類:C+:dynamic_cast,Java:instanceof,課件說這是設計不好的標志,我覺得這是語言設計不好的標志.Java中的類行為:還是略過吧.我比較熟,懶得寫.作為對象的方法:Java中的Me
19、thod類.修改機制:Java中的ClassLoader,加載一個class文件.<h1>第六章</h1>繼承:向下傳遞,實現(xiàn)代碼復用,概念復用.使用條件:"是一個"檢測.子類必須實現(xiàn)父類的全部功能,可以替換父類實例.改寫:子類有時為了避免繼承父類的行為,需要對其進行改寫.語法上必須有一個簽名相同的方法(注:簽名的例子:閹割到函數名和參數,例如int main(int argc, char* argv), 簽名為main(int, char*)運行時:變量聲明為一個類,值來自于子類,方法同時出現(xiàn)于父類和子類.改寫與替換相結合時,想執(zhí)行的一般都是子類的
20、方法.Java和SmallTalk只要通過同一簽名覆蓋,C+中要用virtual聲明.接口和抽象類:接口可以繼承接口.繼承類和實現(xiàn)接口非常相似,所以使用繼承這一術語.抽象方法:定義但不實現(xiàn).創(chuàng)建實例前子類必須實現(xiàn)父類的抽象方法.Java,C#:abstractC+:virtual繼承的形式:特殊化:Window->TextWindow,新類是基類的特定類型.規(guī)范化:保證子類和父類有某個公共的接口.實現(xiàn)抽象規(guī)范.構造:繼承幾乎所有的功能,只是改變方法名或參數列表,為了繼承而繼承.泛化:擴展基類的行為,形成更泛化的抽象.擴展:為了往基類中添加薪行為.限制繼承:接收繼承來的方法然后使其無效化,
21、例如雙向隊列->堆棧.違反可替換性原則.變體:不存在層次關系,但是為了實現(xiàn)類似的功能.更好的方式是提煉抽象類.合并:合并兩個或更多抽象特征.多重繼承支持.Java中的匿名類:只能創(chuàng)建一個匿名類的實例.匿名類必須繼承于父類或接口,不需要構造函數進行初始化.構造函數:繼承使構造函數變得復雜.父類和子類都有待執(zhí)行的初始化代碼.創(chuàng)建新對象時都要執(zhí)行.可替換性:變量聲明時指定的類型不必與它所容納的值類型相一致.子類和子類型:子類是語法層面上的,只要extend了就是子類.子類型是邏輯層面上的,要滿足父類型的特征.<h1>第七章</h1>靜態(tài)和動態(tài):靜態(tài)常用于表示編譯期確定的
22、屬性和特征.動態(tài)表示運行時綁定與對象的屬性或特征.靜態(tài)類和動態(tài)類:變量的靜態(tài)類是指用于聲明變量的類.變量的動態(tài)類是指比啊這事告訴我的當前數值相關的類.靜態(tài)類型和動態(tài)類型:靜態(tài)類型:表達式合法性不是基于接收器的當前動態(tài)數值,而是基于接收器的動態(tài)類.運行時的類型決定:替換原則可以通過提升數值在繼承層次上的位置來體現(xiàn).有時還需子類判定.父類強轉子類(反多態(tài),向下造型)方法綁定:動態(tài)綁定:響應消息時對那個方法進行綁定是有接收器當前所包含的動態(tài)數值來決定的.多態(tài)變量:方法所執(zhí)行的消息是由最近賦值給變量的數值的類型來決定的.Java,SmallTalk變量都是多態(tài)的.C+在使用指針或引用并且virtual
23、的情況下可以多態(tài).替換:內存布局:1.只分配基類所需的存儲空間2.分配最大的存儲空間3.只保存指針C+使用最小分配,賦值時會出現(xiàn)切割.所以只有指針和引用是多態(tài)的.最大內存分配有難以確定對象大小的問題.Java,SmallTalk使用動態(tài)內存分配,指針大小恒定,不會出現(xiàn)切割.賦值有復制語義和指針語意(C+/Java,Java中基本類型和類)復制和克隆:淺復制:共享實例變量深復制:復制實例變量C+:拷貝構造函數Java:改寫clone相同和同一檢驗:=(同一)和equals(相同).<h1>第八章</h1>設計目標:可擴展性:新功能易加入系統(tǒng)靈活性:允許代碼修改平穩(wěn)發(fā)生可插
24、入性:容易將一個類換為另一個具有相同接口的類.軟件復用的意義:生產率,軟件質量,可維護性.面向對象設計的優(yōu)點:可在更高層次上實現(xiàn)可復用性.抽象化和繼承:概念和定義可復用多態(tài):實現(xiàn)和應用可復用抽象化和封裝:可維護性復用的條件:抽象層次穩(wěn)定,獨立面向對象復用:可維護型復用是以設計原則和設計模式為基礎的.面向對象設計原則:OCP(開閉原則):對擴展開放,對修改關閉.試圖設計永遠也不需要改變的模塊.LSP(里氏替換原則):指向基類的引用的函數,必須能在不知道具體派生類對象類型的情況下使用它們.DIP(依賴倒轉原則):抽象不應當依賴于細節(jié),細節(jié)應當依賴于抽象.ISP(接口隔離原則):為同一角色提供寬窄不
25、同的接口.CRP(組合復用原則):優(yōu)先使用組合而非繼承.因為組合是黑盒復用,不依賴父類型細節(jié).但是導致對象過多.繼承的優(yōu)點:容易進行新的視線,因為其大多數可以繼承而來.易于修改或擴展被復用的實現(xiàn).LOD(迪米特法則):最少知識原則,一個對象應該對其他對象盡可能少的了解.SRP(單一職責原則)多重繼承:一個對象可以有多個父類,繼承每個父類的數據和行為."是一個"規(guī)則,"作為一個"關系,對象同時扮演多個角色.問題:名稱歧義:父類中同名方法.解決方法:1.使用全限定名:調用時聲明來自哪個父類2.重定義和重命名:不符合替換原則3.引入輔助類:C+中的解決方法.接
26、口的多重繼承:Java,C#使用,對于子類來說,接口不提供任何代碼,所以不會產生兩部分繼承代碼之間的沖突.使用內部類進行多重繼承:產生替換上的問題.多重繼承來自公共祖先:數據應不應該copy多份C+使用virtual修飾符解決.<h1>第十章</h1>多態(tài)的形式:1.重載:通過類型簽名區(qū)分,例如void example()和void example(int x)2.改寫:層次關系中的相同簽名.3.多態(tài)變量4.泛型:模版類軟件復用機制:1.繼承和組合組合:利用已存在的組件來創(chuàng)建新的應用程序,委托成員實現(xiàn)其功能,不符合替換繼承:自動的與新的數據抽象建立聯(lián)系.比較:組合較為簡
27、單,不用考慮父類定義的所有操作.繼承無法直到一個方法是否可以合法的應用于父類.繼承代碼簡潔,但是無法防止用戶使用父類方法來操縱新的數據結構.<h1>第十一章</h1>重載:重載是在編譯時執(zhí)行的,是多態(tài)的一中很強大的形式,非面向對象語言也支持.范疇:我看就是他奶奶的作用域,寫得這么專業(yè),肯定是google翻譯過來的.基于范疇的重載:相同的名稱可以在不引起歧義且不造成精度損失的情況下出現(xiàn)于不同的范疇.并不一定要語義相關,例如繼承.基于簽名的重載:多個過程允許共享同一名稱,通過參數列表進行區(qū)分.在編譯期基于靜態(tài)類型完成,不涉及運行機制.強轉:忘了的就自己看吧.重定義:當子類定
28、義了一個與父類具有相同名稱但類型簽名不同的方法時,發(fā)生重定義.類型簽名的變化是區(qū)分改寫和重定義的主要依據.Java使用融合模型,自動調用父類的方法.C+使用分級模型,需要在子類做代理實現(xiàn)調用.<h1>第十二章</h1>改寫:與替換原則結合使用.改寫可看成是重載的一種特殊情況.由于重載也涉及一個方法名稱和兩個或更多的方法體.差異:1.方法所在的類之間必須有繼承關系.2.發(fā)生改寫,簽名必須匹配.3.重載方法總是獨立的,而改寫的兩個方法有時候會結合起來實現(xiàn)某種行為.4.改寫是一種運行時機制.標識改寫:各種語言在如何通過代碼實現(xiàn)標識改寫這方面存在著差異.Java不需要,C+應聲
29、明virtual.改寫不能改變方法的可見性.代替:完全使用子類方法.改進:將繼承父類的方法并作為行為的一部分.延遲方法:只定義沒有實現(xiàn),C+的純虛方法,Java的抽象方法.意義:為編譯器提供信息.改寫與遮蔽:存在語法的相似性.類似如重載,改寫是運行時機制,遮蔽基于靜態(tài)類型解析,編譯期綁定,例如Java中的static方法會根據靜態(tài)類型調用而不是動態(tài)類型.協(xié)方差與反協(xié)方差:操他奶奶的,肯定是google翻譯過來的.我相信是相關和反相關很少有改變類型簽名的需求,通常將類型在其繼承層次上提升或降低。當一個類型降低類型層次作為子類時,將使用協(xié)方差變化術語。反之,當一個類型由子類化反向提升類型層次時,將
30、使用反協(xié)方差變化術語。協(xié)方差與替換:當協(xié)方差變化遇到替換原則時,根據替換原則,應該能夠聲明一個類型為父類型的變量,但是卻將類型為子類型的數值賦值給它。大多數語言都通過使用一種稱為非方差的技術來避免這類問題。即,子類不允許以任何方式改變關于改寫方法的類型簽名。防止改寫:Java:final,C#:sealed<h1>設計模式</h1>模式:模式就是對已解決問題的記錄.設計模式使人們更加簡便的復用成功的設計和體系結構.設計模式要素:1.名稱:助記名,描述模式的問題,解決方案和效果.2.問題:描述在何時應用模式.3.解決方案:描述設計的組成成分.4.效果:模式應用的效果及應權
31、衡的問題.簡單工廠模式:工廠創(chuàng)建抽象產品的實例具體產品.屬于創(chuàng)建模式.簡單工廠模式是有一個工廠類根據傳入的參量決定創(chuàng)建出哪一種產品類的實例。例如Java里根據字符串獲得編碼對象的方法.角色與結構:工廠類:核心,有一個具體的類實現(xiàn).抽象產品:所有產品的父類.具體產品:工廠創(chuàng)建的對象.優(yōu)點:核心是工廠類,必須包含判斷邏輯決定創(chuàng)建哪個類.客戶端免除直接創(chuàng)建產品對象的責任.實現(xiàn)了對責任的分割.缺點:工廠類形成了全能類.擴展困難.不滿足OCP.工廠方法模式:定義一個創(chuàng)建產品對象的工廠接口,將實際創(chuàng)建工作推遲到子類中,屬于創(chuàng)建模式.由于使用了多態(tài)性,保持了簡單工廠的優(yōu)點,克服了它的缺點.角色與結構:抽象工
32、廠:是工廠方法的核心,與應用程序無關,創(chuàng)建對象的工廠類必須實現(xiàn)這個接口,常常使用抽象類實現(xiàn).具體工廠:實現(xiàn)了抽象工廠接口的具體類,含有與應用密切相關的邏輯.創(chuàng)建產品對象.抽象產品:工廠創(chuàng)建對象的超類.常常是抽象類.具體產品:抽象產品的子類,被創(chuàng)建.活動序列:1.客戶端創(chuàng)建具體工廠對象.其靜態(tài)類型為工廠,動態(tài)類型為具體工廠.2.調用工廠對象的工廠方法factory().3.工廠對象創(chuàng)建出產品對象.是對簡單工廠的推廣.完全支持OCP.抽象工廠模式:是所有工廠模式中最為抽象和最具一般性的一種形態(tài).抽象工廠模式與工廠方法模式的最大區(qū)別就在于,工廠方法模式針對的是一個產品等級結構;而抽象工廠模式則需要面
33、對多個產品等級結構產品族:不同產品等級結構中,功能相關聯(lián)的產品組成的家族.如果采用抽象工廠方法模式,就勢必要使用多個獨立的工廠等級結構來對付多個產品等級結構.導致多個平行的工廠等級結構.角色與結構:抽象工廠,具體工廠,抽象產品,具體產品.與工廠方法模式類似,但是抽象工廠結構中可以有多個工廠方法.單例模式:單例模式確保某一個類只有一個實例,自行實例化并向整個系統(tǒng)提供這個實例,是創(chuàng)建模式.整個系統(tǒng)共享的資源,例如Java中的Runtime類.餓漢式:類被加載時,靜態(tài)變量m_instance被初始化,單例類的唯一實例就被創(chuàng)建出來了.構造子私有,避免外界創(chuàng)建.懶漢式:類被加載時不實例化,在被引用時實例
34、化.區(qū)別:m_instance初始化為new實例還是null.餓漢式加載時實例化,資源利用效率差些.Builder模式:把一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示.Builder模式是一步一步創(chuàng)建一個復雜的對象,它允許用戶可以只通過指定復雜對象的類型和內容就可以構建它們。用戶不知道內部的具體構建細節(jié)。Builder模式是非常類似抽象工廠模式,細微的區(qū)別大概只有在反復使用中才能體會到.例如Java中的StringBuilder.流程:1.創(chuàng)建Builder對象.2.創(chuàng)建Director對象.3.使用Director對象指導Builder對象一步步生成結果.4.獲得B
35、uild的結果.結構模式:如何將類和對象組合成一個更大的結構.可以分為類模式和對象模式.類模式采用繼承機制來組合接口和實現(xiàn).對象模式描述了如何對一些對象進行組合,實現(xiàn)新功能的一些方法.因為可以在運行時刻改變對象組合關系,所以對象組合方式具有更大的靈活性 適配器模式:將一個類的接口轉換成客戶希望的另外一個接口.問題:1.已經存在的類接口不適用.2.一個可復用的類與其他不相關的類協(xié)作.3.想使用一些已經存在的子類,但是不能對每個都子類化以匹配他們的接口.解決方案:Target定義Client使用的特定領域相關的接口.Adaptee定義對Adaptee接口需要與Target接口進行適配.Adapte
36、r對Adaptee接口與Target接口進行適配.類適配器:適配器同時實現(xiàn)兩端的接口.對象適配器:適配器引用被適配的類.代理模式:為其他對象提供一種代理以控制對這個對象的訪問.Proxy保存一個引用時的代理可以訪問的實體.RealSubject是Subject的實體.Proxy會引用Subject,提供相同的接口,代理可以用來替代實體,控制實體.Subject定義RealSubject和Proxy公用的接口,這樣任何可以使用RealSubject的地方都可以使用Proxy.RealSubject定義Proxy所代表的實體.<h2>我不知道下面的東西考不考,但是課件上寫的非常簡單</h2>Composite模式:將對象組合成樹型結構以表示"部分-整體"的層次結構.使用戶對單個對象和組合對象的使用具有一致性.Composite有Component作為子節(jié)點,同時是Component的子類.Leaf上實現(xiàn)Operation,然后調用根節(jié)點的Operation時遞歸調用.Decorator模式:動態(tài)地給對象添加一些額外的職責.ConcreteDecorator作為Decorator的子類.Decorator是抽象類,包含一個對Component的引用.調用Decorator.Operation時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融服務行業(yè)綠色金融與投資顧問方案
- 公司計時工作勞動合同書
- 行政合同的主體是
- 農民合作社經營管理方案
- 企業(yè)服務質量管理作業(yè)指導書
- 保安員工合同
- 2025年南陽b2貨運上崗證模擬考試
- 小學二年級數學上冊口算練習題
- 電商代運營合同(2篇)
- 電力合同管理協(xié)議(2篇)
- 蔬菜采購項目投標書
- 肩周炎康復護理
- 2022年安徽管子文化旅游集團有限公司招聘筆試試題及答案解析
- SAPPM設備管理解決方案
- Q-HN-1-0000.08.004《風力發(fā)電場電能質量監(jiān)督技術標準》
- 多指畸形-課件
- 5G NSA站點開通指導書(臨時IP開站)
- 宗教與社會課件
- 3人-機-環(huán)-管理本質安全化措施課件
- 生殖醫(yī)學中心建設驗收標準分析-講座課件PPT
- DB44∕T 1811-2016 石灰?guī)r山地造林技術規(guī)程
評論
0/150
提交評論