摘要:面向?qū)ο笤O(shè)計(jì)模式通常以類(lèi)別或?qū)ο髞?lái)描述其中的關(guān)系和相互作用,但不涉及用來(lái)完成應(yīng)用程序的特定類(lèi)別或?qū)ο蟆@锸洗鷵Q原則里氏代換原則是面向?qū)ο笤O(shè)計(jì)的基本原則之一。
通俗易懂的設(shè)計(jì)模式
零、使用
1、安裝
2、測(cè)試
一、什么是設(shè)計(jì)模式
二、設(shè)計(jì)模式的類(lèi)型
三、設(shè)計(jì)模式的六大原則
四、UML類(lèi)圖
1、看懂UML類(lèi)圖
2、解釋
五、資料
前言:花了一些時(shí)間再次熟悉了一遍設(shè)計(jì)模式,主要是參考design-patterns-for-humans,也有了一些感悟,本人能力有限,如遇到什么不對(duì)的地方還望指出修正,謝謝
有收獲的話(huà)請(qǐng)加顆小星星,沒(méi)有收獲的話(huà)可以 反對(duì) 沒(méi)有幫助 舉報(bào)三連
倉(cāng)庫(kù)地址
博客原文
零、使用 1、安裝composer create-project -s dev omgzui/design-pattern
or
git clone https://github.com/OMGZui/DesignPattern composer install2、測(cè)試
vendor/bin/phpunit tests/一、什么是設(shè)計(jì)模式
摘自wiki:
在軟件工程中,設(shè)計(jì)模式(design pattern)是對(duì)軟件設(shè)計(jì)中普遍存在(反復(fù)出現(xiàn))的各種問(wèn)題,所提出的解決方案。這個(gè)術(shù)語(yǔ)是由埃里?!べが敚‥rich Gamma)等人在1990年代從建筑設(shè)計(jì)領(lǐng)域引入到計(jì)算機(jī)科學(xué)的。設(shè)計(jì)模式并不直接用來(lái)完成代碼的編寫(xiě),而是描述在各種不同情況下,要怎么解決問(wèn)題的一種方案。面向?qū)ο笤O(shè)計(jì)模式通常以類(lèi)別)或?qū)ο?來(lái)描述其中的關(guān)系和相互作用,但不涉及用來(lái)完成應(yīng)用程序的特定類(lèi)別或?qū)ο蟆TO(shè)計(jì)模式能使不穩(wěn)定依賴(lài)于相對(duì)穩(wěn)定、具體依賴(lài)于相對(duì)抽象,避免會(huì)引起麻煩的緊耦合,以增強(qiáng)軟件設(shè)計(jì)面對(duì)并適應(yīng)變化的能力。
并非所有的軟件模式都是設(shè)計(jì)模式,設(shè)計(jì)模式特指軟件“設(shè)計(jì)”層次上的問(wèn)題。還有其他非設(shè)計(jì)模式的模式,如架構(gòu)模式。同時(shí),算法不能算是一種設(shè)計(jì)模式,因?yàn)樗惴ㄖ饕怯脕?lái)解決計(jì)算上的問(wèn)題,而非設(shè)計(jì)上的問(wèn)題。
隨著軟件開(kāi)發(fā)社群對(duì)設(shè)計(jì)模式的興趣日益增長(zhǎng),已經(jīng)出版了一些相關(guān)的專(zhuān)著,定期召開(kāi)相應(yīng)的研討會(huì),而且沃德·坎寧安(Ward Cunningham)為此發(fā)明了WikiWiki用來(lái)交流設(shè)計(jì)模式的經(jīng)驗(yàn)。
設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_(kāi)發(fā)人員所采用。設(shè)計(jì)模式是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。這些解決方案是眾多軟件開(kāi)發(fā)人員經(jīng)過(guò)相當(dāng)長(zhǎng)的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來(lái)的。
簡(jiǎn)而言之設(shè)計(jì)模式就是一套解決方案,目的是為了重用代碼,同時(shí)也能保證代碼的可靠性
二、設(shè)計(jì)模式的類(lèi)型
創(chuàng)建型模式(Creational):這些設(shè)計(jì)模式提供了一種在創(chuàng)建對(duì)象的同時(shí)隱藏創(chuàng)建邏輯的方式,而不是使用 new 運(yùn)算符直接實(shí)例化對(duì)象。這使得程序在判斷針對(duì)某個(gè)給定實(shí)例需要?jiǎng)?chuàng)建哪些對(duì)象時(shí)更加靈活
簡(jiǎn)單工廠(chǎng)模式(Simple Factory Pattern) 傳送門(mén)
抽象方法模式(Factory Method Pattern) 傳送門(mén)
抽象工廠(chǎng)模式(Abstract Factory Pattern) 傳送門(mén)
單例模式(Singleton Pattern) 傳送門(mén)
建造者模式(Builder Pattern) 傳送門(mén)
原型模式(Prototype Pattern) PHP使用clone即可實(shí)現(xiàn),目的是減少開(kāi)銷(xiāo)
結(jié)構(gòu)型模式(Structural):這些設(shè)計(jì)模式關(guān)注類(lèi)和對(duì)象的組合。繼承的概念被用來(lái)組合接口和定義組合對(duì)象獲得新功能的方式
適配器模式(Adapter Pattern) 傳送門(mén)
橋接模式(Bridge Pattern) 傳送門(mén)
裝飾器模式(Decorator Pattern) 傳送門(mén)
外觀模式(Facade Pattern) 傳送門(mén)
享元模式(Flyweight Pattern) 傳送門(mén)
代理模式(Proxy Pattern) 傳送門(mén)
行為型模式(Behavioral):這些設(shè)計(jì)模式特別關(guān)注對(duì)象之間的通信
責(zé)任鏈模式(Chain of Responsibility Pattern) 傳送門(mén)
命令模式(Command Pattern) 傳送門(mén)
迭代器模式(Iterator Pattern) 傳送門(mén)
備忘錄模式(Memento Pattern) 傳送門(mén)
觀察者模式(Observer Pattern) 傳送門(mén)
狀態(tài)模式(State Pattern) 傳送門(mén)
策略模式(Strategy Pattern) 傳送門(mén)
訪(fǎng)問(wèn)者模式(Visitor Pattern) 傳送門(mén)
模板方法模式(Template Method Pattern) 傳送門(mén)
三、設(shè)計(jì)模式的六大原則開(kāi)閉原則(Open Close Principle)
開(kāi)閉原則的意思是:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。在程序需要進(jìn)行拓展的時(shí)候,不能去修改原有的代碼,實(shí)現(xiàn)一個(gè)熱插拔的效果。簡(jiǎn)言之,是為了使程序的擴(kuò)展性好,易于維護(hù)和升級(jí)。想要達(dá)到這樣的效果,我們需要使用接口和抽象類(lèi),后面的具體設(shè)計(jì)中我們會(huì)提到這點(diǎn)。
里氏代換原則(Liskov Substitution Principle)
里氏代換原則是面向?qū)ο笤O(shè)計(jì)的基本原則之一。 里氏代換原則中說(shuō),任何基類(lèi)可以出現(xiàn)的地方,子類(lèi)一定可以出現(xiàn)。LSP 是繼承復(fù)用的基石,只有當(dāng)派生類(lèi)可以替換掉基類(lèi),且軟件單位的功能不受到影響時(shí),基類(lèi)才能真正被復(fù)用,而派生類(lèi)也能夠在基類(lèi)的基礎(chǔ)上增加新的行為。里氏代換原則是對(duì)開(kāi)閉原則的補(bǔ)充。實(shí)現(xiàn)開(kāi)閉原則的關(guān)鍵步驟就是抽象化,而基類(lèi)與子類(lèi)的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對(duì)實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。
依賴(lài)倒轉(zhuǎn)原則(Dependence Inversion Principle)
這個(gè)原則是開(kāi)閉原則的基礎(chǔ),具體內(nèi)容:針對(duì)接口編程,依賴(lài)于抽象而不依賴(lài)于具體。
接口隔離原則(Interface Segregation Principle)
這個(gè)原則的意思是:使用多個(gè)隔離的接口,比使用單個(gè)接口要好。它還有另外一個(gè)意思是:降低類(lèi)之間的耦合度。由此可見(jiàn),其實(shí)設(shè)計(jì)模式就是從大型軟件架構(gòu)出發(fā)、便于升級(jí)和維護(hù)的軟件設(shè)計(jì)思想,它強(qiáng)調(diào)降低依賴(lài),降低耦合。
迪米特法則,又稱(chēng)最少知道原則(Demeter Principle)
最少知道原則是指:一個(gè)實(shí)體應(yīng)當(dāng)盡量少地與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對(duì)獨(dú)立。
合成復(fù)用原則(Composite Reuse Principle)
合成復(fù)用原則是指:盡量使用合成/聚合的方式,而不是使用繼承。
四、UML類(lèi)圖 1、看懂UML類(lèi)圖一個(gè)簡(jiǎn)單的栗子
車(chē)的類(lèi)圖結(jié)構(gòu)為abstract,表示車(chē)是一個(gè)抽象類(lèi)
它有兩個(gè)繼承類(lèi):小汽車(chē)和自行車(chē),它們之間的關(guān)系為實(shí)現(xiàn)關(guān)系,使用帶空心箭頭的虛線(xiàn)表示
小汽車(chē)為與SUV之間也是繼承關(guān)系,它們之間的關(guān)系為泛化關(guān)系,使用帶空心箭頭的實(shí)線(xiàn)表示
小汽車(chē)與發(fā)動(dòng)機(jī)和輪胎之間是組合關(guān)系,使用帶實(shí)心箭頭的實(shí)線(xiàn)表示
學(xué)生與班級(jí)之間是聚合關(guān)系,使用帶空心箭頭的實(shí)線(xiàn)表示
學(xué)生與身份證之間為關(guān)聯(lián)關(guān)系,使用一根實(shí)線(xiàn)表示
學(xué)生上學(xué)需要用到自行車(chē),與自行車(chē)是一種依賴(lài)關(guān)系,使用帶箭頭的虛線(xiàn)表示
2、解釋實(shí)現(xiàn)關(guān)系是繼承自抽象類(lèi),泛化關(guān)系是繼承自非抽象類(lèi)
組合關(guān)系是強(qiáng)依賴(lài)的,比如上圖中的小汽車(chē)由發(fā)動(dòng)機(jī)和輪胎組成,小汽車(chē)不在了,發(fā)動(dòng)機(jī)和輪胎也是不存在了
聚合是不是強(qiáng)依賴(lài)的,比如上圖中的一個(gè)班級(jí)由學(xué)生構(gòu)成,班級(jí)不在了,學(xué)生還在
關(guān)聯(lián)關(guān)系是強(qiáng)關(guān)聯(lián)的,比如上圖中學(xué)生跟身份證關(guān)聯(lián)了,可以說(shuō)是身份證可以代表學(xué)生,學(xué)生也能代表身份證
依賴(lài)關(guān)系一般是單向的,雙向依賴(lài)是非常糟糕的,比如上圖中學(xué)生依賴(lài)自行車(chē),但是自行車(chē)依賴(lài)學(xué)生是說(shuō)不通的,同時(shí)學(xué)生也可以依賴(lài)價(jià)值百萬(wàn)的公交車(chē)或價(jià)值上億的地鐵,只是臨時(shí)性的依賴(lài)
五、資料圖說(shuō)設(shè)計(jì)模式
design-patterns-for-humans
DesignPatternsPHP
UML軟件
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/29839.html
摘要:換算在設(shè)計(jì)圖中,設(shè)計(jì)圖大小為如果一個(gè)寬度為換算所以在微信小程序中,直接填寫(xiě)即可。是在不同屏幕下可以適配的,所以使用單位只要在一種設(shè)計(jì)圖下適配,都可以在不同設(shè)備大小自己調(diào)節(jié)大小通過(guò)以上例子看出做小程序時(shí),需要設(shè)計(jì)圖為以手機(jī)大小設(shè)計(jì)方案最佳 showImg(https://segmentfault.com/img/bVKqg2?w=979&h=596); pt:屏幕物理像素(屏幕實(shí)際寬度...
摘要:裝飾器模式允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這便是裝飾模式,通過(guò)一層一層的裝飾,我們可以靈活的得到我們想要的結(jié)果??梢暂p松的添加新的裝飾器類(lèi)或者新的組件來(lái)創(chuàng)建靈活的結(jié)構(gòu)。 前言 在編碼的時(shí)候,我們?yōu)榱藬U(kuò)展一個(gè)類(lèi)經(jīng)常是使用繼承方式來(lái)實(shí)現(xiàn),隨著擴(kuò)展功能的增多,子類(lèi)會(huì)越來(lái)越膨脹,使系統(tǒng)變得不靈活。 裝飾器模式( Decorator Pattern )允許向一個(gè)現(xiàn)有的對(duì)象添...
摘要:的學(xué)習(xí)筆記首先先了解下什么是框架框架視圖用戶(hù)界面。創(chuàng)建數(shù)組,保存監(jiān)聽(tīng)函數(shù)獲取倉(cāng)庫(kù)中當(dāng)前狀態(tài)只有調(diào)用方法才能更新倉(cāng)庫(kù)合并狀態(tài)執(zhí)行監(jiān)聽(tīng)函數(shù),更新添加監(jiān)聽(tīng)函數(shù)由于每次執(zhí)行后,都會(huì)執(zhí)行所以這一行的作用就是在初始化中所有的節(jié)點(diǎn)。 redux的學(xué)習(xí)筆記 首先先了解下什么是MVC框架 MVC框架(Model-View-Controller) 視圖(View):用戶(hù)界面。 => 傳送指令到 Cont...
閱讀 2003·2021-11-23 09:51
閱讀 1451·2021-11-18 10:02
閱讀 1040·2021-10-25 09:44
閱讀 2177·2019-08-26 18:36
閱讀 1696·2019-08-26 12:17
閱讀 1232·2019-08-26 11:59
閱讀 2808·2019-08-23 15:56
閱讀 3435·2019-08-23 15:05