java設計模式筆記

  創建型模式:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式

 

  結構型模式:適配器模式、裝飾器模式、代理模式、外觀模式、

              橋接模式、組合模式、享元模式

 

  行爲型模式:策略模式、模版方法模式、觀察者模式、迭代子模式、責任鏈模式、

              命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、

              解釋器模式

 

(併發型模式、線程池模式)

重點內容記錄:

創建型模式:

工廠方法模式             出現大量產品要創建,並且有共同的接口時

抽象工廠模式             增加功能只需增加實現類,無需改動原有代碼

單例模式                 保證在一個JVM中,該對象只有一個實例存在  

代碼如下:

package helloworld;

 

public class Singleton {

private static Singleton singleton=null;

private Singleton(){

}

public static Singleton getInstance(){

if(singleton==null){

synchronized(singleton){

if(singleton==null){

singleton=new Singleton();

}

}

}

return singleton;

}

}

 

建造者模式             將各種產品集中管理,用於創建複合對象

 

原型模式              

 

關於clone

淺複製:將一個對象複製後,基本數據類型的變量都會重新創建,而引用類型,指向的還是原對象所指向的。

深複製:將一個對象複製後,不論是基本數據類型還有引用類型,都是重新創建的。簡單來說,就是深複製進行了完全徹底的複製,而淺複製不徹底。

對於比較複雜的對象,選擇使用java串行化來實現深複製較爲簡便。其中串行化也成爲“醃鹹菜”,並行化成爲“回鮮”。

實現代碼如下:

public Object deepClone() {    

   //將對象寫到流裏    

   ByteArrayOutoutStream bo=new ByteArrayOutputStream();    

   ObjectOutputStream oo=new ObjectOutputStream(bo);    

   oo.writeObject(this);    

   //從流裏讀出來    

   ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());    

   ObjectInputStream oi=new ObjectInputStream(bi);    

   return(oi.readObject());    

}

結構型模式:

 

適配器模式:

類的適配器模式:當希望將一個類轉換成滿足另一個新接口的類時,可以使用類的適配器模式,創建一個新類,繼承原有的類,實現新的接口即可。

對象的適配器模式:當希望將一個對象轉換成滿足另一個新接口的對象時,可以創建一個Wrapper類,持有原類的一個實例,在Wrapper類的方法中,調用實例的方法就行。

接口的適配器模式:當不希望實現一個接口中所有的方法時,可以創建一個抽象類Wrapper,實現所有方法,我們寫別的類的時候,繼承抽象類即可。

裝飾模式:

裝飾模式就是給一個對象增加一些新的功能,而且是動態的,要求裝飾對象和被裝飾對象實現同一個接口,裝飾對象持有被裝飾對象的實例

代理模式:

多一個代理類出來,替原對象進行一些操作如果已有的方法在使用的時候需要對原有的方法進行改進採用一個代理類調用原有的方法,且對產生的結果進行控制。

外觀模式:

解決類與類之家的依賴關係,像spring一樣,可以將類和類之間的關係配置到配置文件中,而外觀模式就是將他們的關係放在一個Facade類中,降低了類類之間的耦合度,該模式中沒有涉及到接口

橋接模式:

把事物和其具體實現分開,使他們可以各自獨立的變化。橋接的用意是:將抽象化與實現化解耦,使得二者可以獨立變化

組合模式:

將多個對象組合在一起進行操作,常用於表示樹形結構中,例如二叉樹,數等

享元模式:

主要目的是實現對象的共享,即共享池,當系統中對象多的時候可以減少內存的開銷,通常與工廠模式一起使用。例如數據庫連接共享usernamepassword

行爲型模式:

 

策略模式:

定義了一系列算法,並將每個算法封裝起來,使他們可以相互替換,且算法的變化不會影響到使用算法的客戶。策略模式的決定權在用戶

模版方法模式:

一個抽象類中,有一個主方法,再定義1...n個方法,可以是抽象的,也可以是實際的方法,定義一個類,繼承該抽象類,重寫抽象方法,通過調用抽象類,實現對子類的調用

觀察者模式:

當一個對象變化時,其它依賴該對象的對象都會收到通知,並且隨着變化!對象之間是一種一對多的關係

迭代子模式:

迭代器模式就是順序訪問聚集中的對象一是需要遍歷的對象,即聚集對象,二是迭代器對象,用於對聚集對象進行遍歷訪問。

責任鏈模式:

有多個對象,每個對象持有對下一個對象的引用,這樣就會形成一條鏈,請求在這條鏈上傳遞,直到某一對象決定處理該請求。但是發出者並不清楚到底最終那個對象會處理該請求,所以,責任鏈模式可以實現,在隱瞞客戶端的情況下,對系統進行動態的調整。

命令模式:

命令模式的目的就是達到命令的發出者和執行者之間解耦,實現請求和執行分開

備忘錄模式:

主要目的是保存一個對象的某個狀態,以便在適當的時候恢復對象,個人覺得叫備份模式更形象些,通俗的講下:假設有原始類AA中有各種屬性,A可以決定需要備份的屬性,備忘錄類B是用來存儲A的一些內部狀態,類C呢,就是一個用來存儲備忘錄的,且只能存儲,不能修改等操作。

狀態模式:

核心思想就是:當對象的狀態改變時,同時改變其行爲,很好理解!就拿QQ來說,有幾種狀態,在線、隱身、忙碌等,每個狀態對應不同的操作,而且你的好友也能看到你的狀態,所以,狀態模式就兩點:1、可以通過改變狀態來獲得不同的行爲。2、你的好友能同時看到你的變化。

訪問者模式:

把數據結構和作用於結構上的操作解耦合,使得操作集合可相對自由地演化優點是增加操作很容易,因爲增加操作意味着增加新的訪問者。

中介者模式:

中介者模式也是用來降低類類之間的耦合的,因爲如果類類之間有依賴關係的話,不利於功能的拓展和維護,因爲只要修改一個對象,其它關聯的對象都得進行修改。如果使用中介者模式,只需關心和Mediator類的關係,具體類類之間的關係及調度交給Mediator就行,這有點像spring容器的作用。

解釋器模式:

主要在編譯器中運用。

 

 

 

             

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章