1. 程式人生 > >設計模式之創建型模式

設計模式之創建型模式

餓漢式 abs TE 另一個 時也 解釋 自己 alt hat

好長時間沒有寫博客了,今天看了創建型設計模式,做個簡單的總結

  創建型模式

    這種類型的設計模式提供了一種在創建對象的同時隱藏創建邏輯。包含工廠模式(Factory Pattern)抽象工廠模式(Abstract Factory Pattern) 單例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)

  工廠模式(Factory Pattern)

  • 應用實例:您需要一輛汽車,可以直接從工廠裏面提貨,而不用去管這輛汽車是怎麽做出來的,以及這個汽車裏面的具體實現。技術分享圖片
  • 解釋:工廠模式相對比較簡單,我們首先創建它的接口Shape 以及實現類,然後在創建工廠類,在Demo中通過不同的類型通過工廠獲取不同的對象

抽象工廠模式(Factory Pattern)

  應用實例:工作了,為了參加一些聚會,肯定有兩套或多套衣服吧,比如說有商務裝(成套,一系列具體產品)、時尚裝(成套,一系列具體產品),甚至對於一個家庭來說,可能有商務女裝、商務男裝、時尚女裝、時尚男裝,這些也都是成套的,即一系列具體產品。假設一種情況,在您的家中,某一個衣櫃(具體工廠)只能存放某一種這樣的衣服(成套,一系列具體產品),每次拿這種成套的衣服時也自然要從這個衣櫃中取出了。用 OO 的思想去理解,所有的衣櫃(具體工廠)都是衣櫃類的(抽象工廠)某一個,而每一件成套的衣服又包括具體的上衣(某一具體產品),褲子(某一具體產品),這些具體的上衣其實也都是上衣(抽象產品),具體的褲子也都是褲子(另一個抽象產品)。

  技術分享圖片

    解釋:在Demo類中,先創建工廠創造器獲取工廠,通過創建抽象類獲取工廠。最後通過具體的工廠類獲取對象的實現。

  單例模式

    應用實例:單例模式的例子實現太多就不列舉具體那裏使用了,說說對單例的理解,首先單例類只有一個實例,單例類必須自己創建自己的實例,單例類必須給其他對象提供這一實例。

  單例模式的幾種實現方式

    1.懶漢式,線程不安全  

public class Singleton {  
    private static Singleton instance;  
    private Singleton (){}  
  
    public static Singleton getInstance() {  
    if (instance == null) {  
        instance = new Singleton();  
    }  
    return instance;  
    }  
}
  2.懶漢式,線程安全
public class Singleton {  
    private static Singleton instance;  
    private Singleton (){}  
    public static synchronized Singleton getInstance() {  
    if (instance == null) {  
        instance = new Singleton();  
    }  
    return instance;  
    }  
}//這裏備註下,這種加鎖的方式影響效率,適用於對getInstance使用不太頻繁的場景中
  3.餓漢式,線程安全
public class Singleton {  
    private static Singleton instance = new Singleton();  
    private Singleton (){}  
    public static Singleton getInstance() {  
    return instance;  
    }  
}
  4.雙檢鎖/雙重檢驗鎖 JDK 1.5以上
  
public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {  
        synchronized (Singleton.class) {  
        if (singleton == null) {  
            singleton = new Singleton();  
        }  
        }  
    }  
    return singleton;  
    }  
}

  5.登記式、靜態內部類
public class Singleton {  
    private static class SingletonHolder {  
    private static final Singleton INSTANCE = new Singleton();  
    }  
    private Singleton (){}  
    public static final Singleton getInstance() {  
    return SingletonHolder.INSTANCE;  
    }  
}

  6.枚舉 JDK 1.5以上
  
public enum Singleton {  
    INSTANCE;  
    public void whateverMethod() {  
    }  
}
 

設計模式之創建型模式