回覆列表
  • 1 # 俊酷帥

    設計模式分為3大型別,建立,結構,行為。 也就是字面意思,為了解決某型別問題,選擇其中對應的模式。

    毫無疑問,框架中,最常見的有行為型中的典型就是 觀察者(監聽),結構型中的典型就是組合模式,建立型的典型就是工廠

  • 2 # Jet啟思

    技術在高速的發展,不斷的變更,掌握了設計模式則可以應對這些變化,因為技術的變化離不開設計模式,可以說設計模式是走向高階工程師的捷徑。23種設計模式都有它的意義,主要用的有單例,工廠方法,觀察者,建造者,代理,責任鏈等等,其實不能說哪些常用,哪些不常用,掌握了23種,每一種都有意義和精華在裡面,需要不斷的琢磨研究。學習設計模式可以到我的部落格:https://juejin.im/user/59b2122bf265da248f50ea94/posts

  • 3 # 你看我獨角獸嗎

    一般來說,只要熟練了以下這三種設計模式就已經可以應付很多情況。設計模式要經常看才行,建議先收藏後有時間自己手寫一遍或者無聊時翻出來看看,最重要是自己能夠設計出該設計思想的UML圖並應用。

    單例模式

    Java中最簡單的設計模式之一,主要解決一個全域性使用的類頻繁被建立和銷燬。

    重點:

    在記憶體裡只有一個例項,減少了記憶體的開銷;

    避免對資源的多重佔用。

    使用例子:

    Windows 是多程序多執行緒的,在操作一個檔案的時候,就不可避免地出現多個程序或執行緒同時操作一個檔案的現象,所以所有檔案的處理必須透過唯一的例項來進行。

    單例模式UML圖如上,SingleObject類提供了一個靜態方法,供外界獲取它的靜態例項,所以SingletonPatternDemo類只能呼叫SingleObject類下的showMessage()。

    工廠模式

    工廠模式的好處在於客戶端可以請求一個物件,而無需知道這個物件來自哪裡;也就是,使用哪個類來生成這個物件。工廠背後的思想是簡化物件的建立。透過將建立物件的程式碼和使用物件的程式碼解耦,工廠能夠降低應用維護的複雜度。

    重點:

    工廠方法集中在一個地方建立物件,使得物件跟蹤起來容易。

    若需要將物件的建立和使用解耦,工廠方法能派上用場。

    使用例子:

    製造塑膠玩具的壓塑粉都是一樣的,但使用不同的塑膠模具就能產出不同的外形。比如,有一個工廠方法,輸入是目標外形(鴨子或小車)的名稱,輸出則是要求的塑膠外形,正如同一份三文魚,大佬和菜鳥做出來肯定不一樣的。

    工廠模式的UML圖如上,透過建立一個Shape介面和實現Shape介面的實體類。然後定義工廠類ShapeFactory。我們使用ShapeFactory來獲取Shape物件。它將向 ShapeFactory傳遞資訊(CIRCLE / RECTANGLE / SQUARE),以便獲取它所需物件的型別。

    觀察者模式

    主要解決一個物件狀態改變給其他物件通知的問題,使程式變得易用和低耦合,保證高度協作。

    重點:

    觀察者和被觀察者是抽象耦合的;

    建立一套觸發機制。

    使用例子:

    拍賣時,拍賣師觀察最高標價,然後通知給其他競價者競價,拍賣師就是觀察者,觀察拍賣品的價格。

    在ConcreteSubject(具體被觀察者)內部發生改變時,透過抽象被觀察者向觀察者傳送通知。然後Observer是抽象觀察者,它定義了一個更新介面,得到通知後更新自己。最終ConcrereObserver是具體觀察者,實現Observer定義的更新介面,以便在更改通知時更新自身的狀態。

  • 4 # Andoter的學習筆記

    我覺得這個問題從兩個方面來分析:怎麼用Java寫一套漂亮程式碼?常見的設計模式有哪些?

    怎麼用Java寫一套漂亮程式碼?

    我覺得一個漂亮的程式碼包含兩個方面:程式碼編寫規範和架構設計。這裡架構設計就不討論了,這個需要非常深厚的內功造詣才能達到,但是我們還是要一點點努力朝這個方向發展。這裡我們就重點討論下程式碼規範,程式碼規範貫穿程式設計師各個層次,同樣很重要。

    關於Java的程式碼規範大體需要注意以下:

    命名規則

    包名:命名應該都是名詞或名詞性片語,全部小寫,單詞之間用"."分開;一般使用本公司/組織網站域名的逆序後跟具體的軟體內部模組名作為包名;

    類名/介面名:名詞或名詞性片語,每個單詞首字母大寫;一般不使用縮寫,除非其縮寫更通用和便於理解

    方法:動詞或動詞性片語,首字母小寫,第二個及以後的單詞首字母大寫;

    變數:名詞或名詞性片語,首字母小寫,第二個及以後的單詞首字母大寫;

    常量:每一個單詞都要大寫,單詞之間用"_"分開

    檔案組織

    一、Java類中的組織順序

    屬性宣告

    構造方法宣告

    static語句

    普通方法宣告

    main方法宣告

    內部類的宣告

    註釋

    Java有兩種註釋方法。"/* This is a comment */" 和 "// This is a comment"

    第一種應該被用到寫JavaDoc上,並且都用"/**"開頭。

    第二種適合於在做部分程式碼的註釋,但只適合做非常短內容的註釋。

    常見的設計模式有哪些?

    根據我在實際開發中的經驗,經常用的設計模式有:工廠模式、單例模式、門面模式、策略模式、介面卡模式、建造者模式、觀察者模式。

    工廠模式:

    工廠模式核心是封裝物件的建立介面,將new物件的操作封裝起來,方便建立使用、管理物件。

    工廠模式適用於:

    在編碼時不能預見需要建立哪種類的例項。

    系統不應依賴於產品類例項如何被建立、組合和表達的細節

    分為三類:

    簡單工廠模式Simple Factory:不利於產生系列產品;

    工廠方法模式Factory Method:又稱為多形性工廠;

    抽象工廠模式Abstract Factory:又稱為工具箱,產生產品族,但不利於產生新的產品;

    單例模式

    基本概念:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。

    單例模式在實際的開發過程中,使用最常見。針對頻繁使用的類,我們可以將它定義為一個單例來避免類物件頻繁的建立銷燬,提高效率。單例模式有以下特點:

    單例類只能有一個例項

    單例類必須自己建立自己的唯一例項

    單例類給其它物件提供這一例項

    單例模式的實現方式 圍繞單例模式的特點,一般常見的實現方式有以下幾種:

    懶漢式

    餓漢式

    Double Check Lock(DCL)雙重檢查鎖定

    靜態內部類實現

    列舉單例

    記錄式單例

    門面模式

    外觀模式

    外觀模式(Facade模式)也叫門面模式,透過外觀類的包裝,將複雜的系統透過封裝提供簡單的介面供客戶端使用,以便降低客戶端的使用複雜度。外觀模式Facade類提供一個上層介面,整合封裝了各個子系統的方法供客戶端使用。客戶端只需要直接與外觀角色互動,客戶端與子系統之間的複雜關係由外觀角色來實現,從而降低了系統的耦合度。

    策略模式

    策略模式(StrategyPattern)也成政策模式,透過定義抽象類或基類的策略,來生成不同實現的演算法家族,以便各個具體策略類(ConcreteStrategy)能夠進行替換,降低耦合。

    介面卡模式:

    基本概念:介面卡模式把一個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。

    介面卡模式的用途:

    用電器做例子,膝上型電腦的插頭一般都是三相的,即除了陽極、陰極外,還有一個地極。而有些地方的電源插座卻只有兩極,沒有地極。電源插座與膝上型電腦的電源插頭不匹配使得膝上型電腦無法使用。這時候一個三相到兩相的轉換器(介面卡)就能解決此問題,而這正像是本模式所做的事情。

    介面卡模式的結構:介面卡模式有類介面卡模式和物件介面卡模式兩種不同的形式。

    建造者模式

    基本概念:是一種物件構建的設計模式,它可以將複雜物件的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的物件。

    Builder模式是一步一步建立一個複雜的物件,它允許使用者可以只通過指定複雜物件的型別和內容就可以構建它們。使用者不知道內部的具體構建細節。Builder模式是非常類似抽象工廠模式,細微的區別大概只有在反覆使用中才能體會到。

    觀察者模式

    基本概念:觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。觀察者模式又叫釋出-訂閱(Publish/Subscribe)模式。

  • 中秋節和大豐收的關聯?
  • 如何避免我喜歡的人也喜歡我這種錯覺?