我是「猿碼天地」,一個熱愛技術、熱愛程式設計的IT猿。技術是開源的,知識是共享的!
用知識改變命運,讓家人過上更好的生活,網際網路人一家親!
Java知識學堂:https://gitee.com/zhangbw666/it-knowledge
面對這樣的問題,我想說設計模式真的很重要。曾經我也認為學設計模式沒什麼用,但用過了都說好。所以,猿人花了一個星期的時間給大家整理了最常用的設計模式,透過原始碼和文件的形式分享給大家。
希望大家認真學習掌握,真正學以致用。不僅面試時要對答如流,實際工作中也要加以應用,這樣能力才會得到提升。
一、設計模式介紹設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向物件的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟體開發人員經過相當長的一段時間的試驗和錯誤總結出來的。
二、目的為了提高程式碼的可讀性,可擴充套件性以及程式碼的複用性,為了解決在寫程式碼過程中遇到的程式碼設計問題。
三、六大原則3.1 開閉原則對擴充套件開放,對修改關閉(儘可能對程式碼少修改)
3.2 里氏替換原則它是面向物件基本原則之一,任何父類(基類)出現的地方,子類都可以出現,也就是子類可以替換父類的任何功能(體現了父類的可擴充套件性)
3.3 依賴倒轉原則儘可能面向介面程式設計,依賴介面而不依賴類。
3.4 介面隔離原則一個類如果能實現多個介面,儘可能實現多個,為了降低依賴,降低耦合。
3.5 最少知道原則一個實體儘可能少的與其他實體產生相互關聯關係,將實體的功能獨立。
3.6 合成複用原則儘量使用合成,聚合的方式,而不使用繼承。
四、種類Java 中一般認為有23種設計模式,當然暫時不需要所有的都會,但是其中常見的幾種設計模式應該去掌握。總體來說設計模式分為三大類:
建立型模式,共五種:單例模式、工廠方法模式、抽象工廠模式、建造者模式、原型模式。行為型模式,共十一種:策略模式、責任鏈模式、模板方法模式、觀察者模式、迭代器模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介模式、直譯器模式。結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。五、原始碼實戰5.1 建立型模式單例模式-Singleton單例模式是建立物件的一種特殊方式,程式從始至終都只建立一個物件叫單例(單例項)
工廠方法模式-Factory工廠方法是針對每一種產品提供一個工廠類。透過不同的工廠例項來建立不同的產品例項。在同一等級結構中,支援增加任意產品。
抽象工廠模式-Factory建立物件的過程不再由當前類例項化,而是由工廠類完成,在工廠類中只需要告知物件型別即可,工廠模式中必須依賴介面。
建造者模式-Builder工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來管理,用來建立複合物件,所謂複合物件就是指某個類具有不同的屬性。建造者Builder它是將一個複雜的物件分解為多個簡單的物件,然後一步一步構建而成。
5.2 行為型模式策略模式-Strategy定義一系列演算法,將其一一封裝,並使他們相互可以替換,該模式可以使得演算法能夠獨立於使用它的使用者而變化。該模式包含三個角色:策略、上下文和具體策略。
迭代器模式-Iterator迭代器模式提供了一種方法順序訪問一個聚合物件中的各個元素,而又無需暴露該物件的內部實現,這樣既可以做到不暴露集合的內部結構,又可讓外部程式碼透明地訪問集合內部的資料。
模板方法模式-Template定義一個操作中的演算法框架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。模板方法模式確實很簡單,僅僅使用了java的繼承機制,但是它是一個應用非常廣泛的模式,其中AbstractClass叫做抽象模板,它的方法分為兩類:基本方法(由子類去實現)和模板方法(可以有一個或多個,也就是一個框架,實現對基本方法的排程,完成固定的邏輯)。為了防止惡意的操作,一般模板方法上都新增上final關鍵字,不允許被覆寫。
5.3 結構型模式代理模式-Proxy代理模式是指給某一個物件提供一個代理物件,並由代理物件控制對原物件的引用。通俗的來講代理模式就是我們生活中常見的中介。
介面卡模式-dapter介面卡模式(Adapter Pattern):將一個介面轉換成客戶希望的另一個介面,使介面不相容的那些類可以一起工作,其別名為包裝器(Wrapper)。介面卡模式既可以作為類結構型模式,也可以作為物件結構型模式。
裝飾器模式-Decorator動態地給一個物件增加一些額外的職責,增加物件功能來說,裝飾模式比生成子類實現更為靈活。
23種設計模式彩圖
你多學一樣本事,就少說一句求人的話,現在的努力,是為了以後的不求別人,實力是最強的底氣。記住,活著不是靠淚水博得同情,而是靠汗水贏得掌聲。——《寫給程式設計師朋友》