1. 程式人生 > >你所知道的設計模式有哪些?

你所知道的設計模式有哪些?

Java 中一般認為有 23 種設計模式,我們不需要所有的都會,但是其中常用的幾種設計模式應該去掌握。下面列出了所有的設計模式。需要掌握的設計模式我單獨列出來了,當然能掌握的越多越好。
總體來說設計模式分為三大類:
建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。

1..單例設計模式
最好理解的一種設計模式,分為懶漢式和餓漢式。
1.1 餓漢式

public class SingletonEH {
    /**
     *是否 Lazy 初始化:否
     *是否多執行緒安全:是
     *實現難度:易
     *描述:這種方式比較常用,但容易產生垃圾物件。
     *優點:沒有加鎖,執行效率會提高。
     *缺點:類載入時就初始化,浪費記憶體。
     *它基於 classloder 機制避免了多執行緒的同步問題,
     * 不過,instance 在類裝載時就例項化,雖然導致類裝載的原因有很多種,
    * 在單例模式中大多數都是呼叫 getInstance 方法,
     * 但是也不能確定有其他的方式(或者其他的靜態方法)導致類裝載,
     * 這時候初始化 instance 顯然沒有達到 lazy loading 的效果。
     */
private static SingletonEH instance = new SingletonEH(); private SingletonEH (){ } public static SingletonEH getInstance() { System.out.println("instance:"+instance); System.out.println("載入餓漢式...."); return instance; } }

1.2懶漢式

public class SingletonLHsyn
{
/** *是否 Lazy 初始化:是 *是否多執行緒安全:是 *實現難度:易 *描述:這種方式具備很好的 lazy loading,能夠在多執行緒中很好的工作,但是,效率很低,99% 情況下不需要同步。 *優點:第一次呼叫才初始化,避免記憶體浪費。 *缺點:必須加鎖 synchronized 才能保證單例,但加鎖會影響效率。 *getInstance() 的效能對應用程式不是很關鍵(該方法使用不太頻繁)。 */ private static SingletonLHsyn instance; private SingletonLHsyn (){} public static synchronized SingletonLHsyn getInstance() { if (instance == null) { instance = new SingletonLHsyn(); } return instance; } }