- 1、Python有設計模式么
- 2、python面試一般問什麼常用設計模式
- 3、python什麼是設計模式
Python設計模式主要分為三大類:創建型模式、結構型模式、行為型模式;三 大類中又被細分為23種設計模式,以下這幾種是最常見的。
單例模式:是一種常用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實例存在。當你希望在整個系統中,某個類只能出現一個是實例時,單例對象就能派上用場。單例對象的要點有三個:一是某個類只能有一個實例;二是它必須自行創建整個實例,三是它必須自行向整個系統提供這個實例。
工廠模式:提供一個創建對象的接口,不像客戶端暴露創建對象的過程,使用一個公共的接口來創建對象,可以分為三種:簡單工廠、工廠方法、抽象工廠。一個類的行為或其算法可以在運行時更改,這種類型的設計模式屬於行為型模式。
策略模式:是常見的設計模式之一,它是指對一系列的算法定義,並將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立於使用它的客戶而獨立變化。換句話來講,就是針對一個問題而定義出一個解決的模板,這個模板就是具體的策略,每個策略都是按照這個模板進行的,這種情況下我們有新的策略時就可以直接按照模板來寫,而不會影響之前已經定義好的策略。
門面模式:門面模式也被稱作外觀模式。定義如下:要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。門面模式提供一個高層次的接口,使得子系統更易於使用。門面模式注重統一的對象,也就是提供一個訪問子系統的接口。門面模式與模板模式有相似的地方,都是對一些需要重複方法的封裝。但本質上是不同的,模板模式是對類本身的方法的封裝,其被封裝的方法也可以單獨使用;門面模式,是對子系統的封裝,其被封裝的接口理論上是不會被單獨提出來使用的。
1.設計模式介紹
設計模式(Design Patterns)
——可復用面向對象軟件的基礎
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使代碼編製真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項目中合理的運用設計模式可以完美的解決很多問題,每種模式在現在中都有相應的原理來與之對應,每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的核心解決方案,這也是它能被廣泛應用的原因。
2. 設計模式分類
經典的《設計模式》一書歸納出23種設計模式,這23種模式又可歸為,創建型、結構型和行為型3大類
2.1.創建型模式
前面講過,社會化的分工越來越細,自然在軟件設計方面也是如此,因此對象的創建和對象的使用分開也就成為了必然趨勢。因為對象的創建會消耗掉系統的很多資源,所以單獨對對象的創建進行研究,從而能夠高效地創建對象就是創建型模式要探討的問題。這裡有6個具體的創建型模式可供研究,它們分別是:
簡單工廠模式(Simple Factory);
工廠方法模式(Factory Method);
抽象工廠模式(Abstract Factory);
創建者模式(Builder);
原型模式(Prototype);
單例模式(Singleton)。
說明:嚴格來說,簡單工廠模式不是GoF總結出來的23種設計模式之一。
2.2 結構型模式
在解決了對象的創建問題之後,對象的組成以及對象之間的依賴關係就成了開發人員關注的焦點,因為如何設計對象的結構、繼承和依賴關係會影響到後續程序的維護性、代碼的健壯性、耦合性等。對象結構的設計很容易體現出設計人員水平的高低,這裡有7個具體的結構型模式可供研究,它們分別是:
外觀模式(Facade);
適配器模式(Adapter);
代理模式(Proxy);
裝飾模式(Decorator);
橋模式(Bridge);
組合模式(Composite);
享元模式(Flyweight)
2.3 行為型模式
在對象的結構和對象的創建問題都解決了之後,就剩下對象的行為問題了,如果對象的行為設計的好,那麼對象的行為就會更清晰,它們之間的協作效率就會提高,這裡有11個具體的行為型模式可供研究,它們分別是:
模板方法模式(Template Method);
觀察者模式(Observer);
狀態模式(State);
策略模式(Strategy);
職責鏈模式(Chain of Responsibility);
命令模式(Command);
訪問者模式(Visitor);
調停者模式(Mediator);
備忘錄模式(Memento);
迭代器模式(Iterator);
解釋器模式(Interpreter)。
3. 設計模式的六大原則
1、開閉原則(Open Close Principle)
開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易於維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類,後面的具體設計中我們會提到這點。
2、里氏代換原則(Liskov Substitution Principle)
里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被複用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對「開-閉」原則的補充。實現「開-閉」原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規範。—— From Baidu 百科
3、依賴倒轉原則(Dependence Inversion Principle)
這個是開閉原則的基礎,具體內容:真對接口編程,依賴於抽象而不依賴於具體。
4、接口隔離原則(Interface Segregation Principle)
這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。還是一個降低類之間的耦合度的意思,從這兒我們看出,其實設計模式就是一個軟件的設計思想,從大型軟件架構出發,為了升級和維護方便。所以上文中多次出現:降低依賴,降低耦合。
5、迪米特法則(最少知道原則)(Demeter Principle)
為什麼叫最少知道原則,就是說:一個實體應當盡量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。
6、合成復用原則(Composite Reuse Principle)
原則是盡量使用合成/聚合的方式,而不是使用繼承。
Python軟件開發中引入設計模式是由生活中的一些實例啟發而來的。例如,有2個小朋友Alice和Jack,去麥當勞點餐。Alice不了解麥當勞的套餐模式,於是想了一下,跟服務員說:「我要一個麥辣雞腿堡、一個薯條和一杯可樂」。而Jack經常吃麥當勞,他也想點和Alice一樣的餐品。Jack發現其實Alice點的就是麥當勞的A套餐,於是他直接和服務員說:「給我一個A套餐」。
從上面的事例中可以看出,Jack的點餐效率高,因為Jack和服務員都了解麥當勞的套餐模式,溝通起來效率自然就高。那麼在這個生活案例中,創建套餐是提高點餐效率的可重用解決方案。它會根據客戶的需求和餐品的被點頻次制定出符合不同人群的套餐。套餐可以重複被更多的人去點,因此大大提高了顧客與服務員之間的溝通效率。
同理,在軟件開發世界裏,本來沒有設計模式的,用的人多了,也便總結出了設計模式。這就是設計模式的由來。設計模式針對同一情境,眾多軟件開發人員經過長時間總結,便得到了最佳可重用解決方案。這個可重用解決方案解決了軟件開發過程中常見的問題,擁有固定的術語,因此交流起來就方便了很多。
綜上,設計模式是軟件開發過程中共性問題的可重用解決方案。設計模式的內涵第一是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。第二是用來解決共性問題。設計模式的外延有:單例模式、工廠模式、適配器模式、代理模式等。據悉,現用的設計模式有24種,隨着時代的發展,軟件編程可能會遇到新的場景,設計模式會越來越豐富。
先看一個設計模式中最基本的單例模式的例子。Windows裏面的任務管理器就是個典型的單例模式軟件。這是因為Windows任務管理器只能打開一個,就算用戶重複打開,也只能獲得一個實例,這不同於word等軟件可以打開多個實例。其中的原因就是如果有2個窗口同時都能結束某進程,這就會造成在窗口A中某進程結束了,在窗口B中該進程還保留的;同理反過來,某進程在窗口B中結束了,而在窗口A中還保留着。這樣就會造成衝突,系統崩潰。Windows裏面的任務管理器符合單例模式,保證一個類僅有一個實例的設計模式。
原創文章,作者:E6KXL,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/127188.html