設計模式之創建型模式
好長時間沒有寫博客了,今天看了創建型設計模式,做個簡單的總結
創建型模式
這種類型的設計模式提供了一種在創建對象的同時隱藏創建邏輯。包含工廠模式(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() {
}
}
設計模式之創建型模式