《設(shè)計(jì)模式學(xué)習(xí)分享》由會員分享,可在線閱讀,更多相關(guān)《設(shè)計(jì)模式學(xué)習(xí)分享(35頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、Titelmasterformat durch Klicken bearbeiten,Textmasterformate durch Klicken bearbeiten,Zweite Ebene,Dritte Ebene,Vierte Ebene,Fnfte Ebene,*,*,設(shè)計(jì)模式,Design Patterns,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,面向?qū)ο缶幊?對象,(,Object,),對問題領(lǐng)域中事物的抽象,萬物皆對象,唯一,屬性行為 狀態(tài) 屬于某類,Object-Oriented Programming,問題領(lǐng)域,(,Program Domain,),軟件系統(tǒng)所模擬
2、的真實(shí)世界中的系統(tǒng),類,(,Class,),一組具有相同屬性和行為的對象的抽象,接口,(,Interface,),系統(tǒng)對外提供的所有服務(wù),接口類型,描述能夠提供哪些服務(wù),不包含服務(wù)的實(shí)現(xiàn)細(xì)節(jié),抽象,(,Abstract,),從特定角度出發(fā),從已存在的一些事物中抽取所關(guān)注的特性,形成一個(gè)新的事物的思維過程,從問題領(lǐng)域的事物到軟件模型中對象的抽象,從對象到類的抽象,從子類到父類的抽象,基,本概念,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,面向?qū)ο缶幊?繼承,(,Inheritance,),繼承是子類使用父類的方法,Object-Oriented Programming,封裝,(,Encaps
3、ulate,),隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對外公開接口,多態(tài),(,Polymorphism,),接口的多種不同的實(shí)現(xiàn)方式即為多態(tài),3,大特征,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,面向?qū)ο缶幊?依賴,(,Dependency,),類之間的調(diào)用關(guān)系,Object-Oriented Programming,關(guān)聯(lián),(,Association,),類之間的特定對應(yīng)關(guān)系,聚集,(,Aggregation,),整體與部分之間的關(guān)系,泛化,(,Generalization,),類之間的繼承關(guān)系,實(shí)現(xiàn),(,Realization,),類與接口之間的關(guān)系,5,種關(guān)系,OOP,概要,六大原則,創(chuàng)建型,
4、結(jié)構(gòu)型,行為型,單一,職責(zé),原則(,Single Responsibility Principle,),里,氏替換原則(,Liskov Substitution Principle,),依賴,倒轉(zhuǎn)原則(,Dependence Inversion Principle,),接口,隔離原則(,Interface Segregation Principle,),迪,米特,法則 (,Demeter Principle,),合成,復(fù)用原則(,Composite Reuse Principle,),總原則:開閉原則,(,Open Close Principle,),對擴(kuò)展開放,對修改關(guān)閉,為了使程序的擴(kuò)展性
5、好,易于維護(hù)和升級,在程序需要進(jìn)行拓展的時(shí)候,不能去修改原有代碼,而是要擴(kuò)展原有代碼,實(shí)現(xiàn)一個(gè)熱插拔效果,設(shè)計(jì)模式六大原則,6,大原則,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,單一職責(zé)原則,Single Responsibility Principle,應(yīng)該有且僅有一個(gè)原因引起類的變更,類的復(fù)雜性降低,可讀性提高,可維護(hù)性提高,變更風(fēng)險(xiǎn)低,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,里氏替換原則,Liskov Substitution Principle,所有引用基類的地方必須能透明地使用其子類的對象,子類必須完全實(shí)現(xiàn)父類的方法,子類可以有自己的個(gè)性,覆蓋或?qū)崿F(xiàn)父類的方法時(shí)輸入?yún)?shù)
6、可以被放大(子類輸入?yún)?shù)的類型寬于父類),覆寫或?qū)崿F(xiàn)父類的方法時(shí)輸出結(jié)果可以被縮小,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,依賴倒置原則,Dependence Inversion Principle,面向接口編程,依賴于抽象而不依賴于具體,高層模塊不應(yīng)該依賴底層模塊,兩者都應(yīng)該依賴其抽象,抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,接口隔離原則,Interface Segregation Principle,接口盡量細(xì)化,同時(shí)接口中的方法盡量少,客戶端不應(yīng)該依賴它不需要的接口,類間的依賴關(guān)系應(yīng)該建立在最小的接口上,接口要盡量小,接口要高內(nèi)聚,定
7、制服務(wù),接口設(shè)計(jì)是有限度的,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,迪米特法則,Demeter Principle,一個(gè)對象應(yīng)該對其他對象有最少的了解,只和朋友交流,朋友間也是有距離的,不是自己的就是自己的,謹(jǐn)慎使用,Serializable,(序列化),OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,合成復(fù)用原則,Composite Reuse Principle,盡量使用合成,/,聚合的方式,而不是使用繼承,在面向?qū)ο笤O(shè)計(jì)中,可以通過兩種方法在不同的環(huán)境中復(fù)用已有的設(shè)計(jì)和實(shí)現(xiàn),即通過組合,/,聚合關(guān)系或通過繼承,但首先應(yīng)該考慮使用組合,/,聚合,組合,/,聚合可以使系統(tǒng)更加靈活,降
8、低類與類之間的耦合度,一個(gè)類的變化對其他類造成的影響相對較少;其次才考慮繼承,在使用繼承時(shí),需要嚴(yán)格遵循里氏代換原則,有效使用繼承會有助于對問題的理解,降低復(fù)雜度,而濫用繼承反而會增加系統(tǒng)構(gòu)建和維護(hù)的難度以及系統(tǒng)的復(fù)雜度,因此需要慎重使用繼承復(fù)用,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,設(shè)計(jì)模式概覽,23,種模式,創(chuàng)建型模式,工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式,結(jié)構(gòu)型模式,適配器模式 裝飾器模式 代理模式 門面模式 橋接模式 組合模式 享元模式,行為型模式,策略模式 模板方法模式 觀察者模式 迭代子模式 責(zé)任鏈模式 命令模式,備忘錄模式 狀態(tài)模式 訪問者模式 中
9、介者模式 解釋器模式,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,單例模式,Singleton Pattern,確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,工廠方法模式,Factory Method Pattern,定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個(gè)類,使一個(gè)類的實(shí)例化延遲到其子類,一個(gè)抽象產(chǎn)品類,可以派生出多個(gè)具體產(chǎn)品類,一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類,每個(gè)具體工廠類通常只能創(chuàng)建一個(gè)具體產(chǎn)品類的實(shí)例,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,抽象工廠模式,Abstract Factory
10、 Pattern,為創(chuàng)建一組相關(guān)或相互依賴的對象提供一個(gè)接口,而且無需指定他們的具體類,多個(gè)抽象產(chǎn)品類,每個(gè)抽象產(chǎn)品類可以派生出多個(gè)具體產(chǎn)品類,一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類,每個(gè)具體工廠類可以創(chuàng)建多個(gè)具體產(chǎn)品類的實(shí)例,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,原型模式,Prototype Pattern,用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,建造者模式,Builder Pattern,將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可創(chuàng)建不同的表示,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,
11、享元模式,Flyweight Pattern,使用共享對象可有效地支持大量的細(xì)粒度的對象,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,代理模式,Proxy Pattern,為其他對象提供一種代理以控制對這個(gè)對象的訪問,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,門面模式,Facade Pattern,要求一個(gè)子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個(gè)統(tǒng)一的對象進(jìn)行。門面模式提供一個(gè)高層的接口,使得子系統(tǒng)更易于使用,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,適配器模式,Adapter Pattern,將一個(gè)類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的
12、兩個(gè)類能夠在一起工作,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,橋接模式,Bridge Pattern,將抽象和實(shí)現(xiàn)解耦,使得兩者可以獨(dú)立地變化,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,組合模式,Composite Pattern,將對象組合成樹形結(jié)構(gòu)以表示“部分,-,整體”的層次結(jié)構(gòu),使得用戶對單個(gè)對象和組合對象的使用具有一致性,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,裝飾模式,Decorator Pattern,將對象組合成樹形結(jié)構(gòu)以表示“部分,-,整體”的層次結(jié)構(gòu),使得用戶對單個(gè)對象和組合對象的使用具有一致性,+,+,+,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為
13、型,策略模式,Strategy Pattern,定義一組算法,將每個(gè)算法都封裝起來,并且使它們之間可以互換,找喬國老,,造輿論,謊報(bào)荊州危情,給劉備收心,找孫尚香斷后,,掩護(hù)劉備過江,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,狀態(tài)模式,State Pattern,當(dāng)對象的狀態(tài)改變時(shí),同時(shí)改變其行為,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,模板方法模式,Template Method Pattern,定義一個(gè)操作中的算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,觀察者模式,Obs
14、erver Pattern,定義對象間一種一對多的依賴關(guān)系,使得每當(dāng)一個(gè)對象改變狀態(tài),則所有依賴于它的對象都會得到通知并被自動(dòng)更新,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,迭代器模式,Iterator Pattern,它提供一種方法訪問一個(gè)容器對象中各個(gè)元素,而又不需暴露該對象內(nèi)部細(xì)節(jié),OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,責(zé)任鏈模式,Chain of Responsibility Pattern,使多個(gè)對象都有機(jī)會處理請求,從而避免了請求的發(fā)送者和接受者之間的耦合關(guān)系,并沿著這條鏈傳遞該請求,直到有對象處理它為止,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,命令模式,C
15、ommand Pattern,將一個(gè)請求封裝成一個(gè)對象,從而讓你使用不同的請求把客戶端參數(shù)化,對請求排隊(duì)或者記錄請求日志,可以提供命令的撤銷和恢復(fù)功能,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,備忘錄模式,Memento Pattern,在不破壞封裝性的前提下,捕獲一個(gè)對象的內(nèi)部狀態(tài),并在該對象之外保存這個(gè)狀態(tài),這樣以后就可將該對象恢復(fù)到原先保存的狀態(tài),OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,訪問者模式,Visitor Pattern,封裝一些作用于某種數(shù)據(jù)結(jié)構(gòu)中的各元素的操作,它可以在不改變數(shù)據(jù)結(jié)構(gòu)的前提下定義作用于這些元素的新的操作,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,中介者模式,Mediator Pattern,用一個(gè)中介對象封裝一系列的對象交互,中介者使各對象不需要顯示地相互作用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互,OOP,概要,六大原則,創(chuàng)建型,結(jié)構(gòu)型,行為型,解釋器模式,Interpreter Pattern,給定一門語言,定義它的文法的一種表示,并定義一個(gè)解釋器,該解釋器使用該表示來解釋語言中的句子,