淺析單例模式和工廠模式

一、單例模式
通過單例模式可以保證系統中一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。
單例模式有以下特點:
1、單例類只能有一個實例。
2、單例類必須自己創建自己的唯一實例。

3、單例類必須給所有其他對象提供這一實例。

如何設計:
1、將採用單例設計模式的類的構造方法私有化(採用private修飾)。
2、在其內部產生該類的實例化對象,並將其封裝成private static類型。
3、定義一個靜態方法返回該類的實例。

/**
 * 單例模式
 */
public class SingletonTest {
     
     //方式一
     private static SingletonTest instance;
     private void SingletonTest(){ }
     public static SingletonTest getInstance(){
           if(instance==null){
                instance= new SingletonTest();
                }
           return instance;
     }
     
     //方式二
     private static SingletonTest instance = new SingletonTest(); 
     private SingletonTest(){} 
     public static SingletonTest getInstance() { 
        return instance; 
     }
     
}
二、工廠模式

Java中工廠模式在Java EE中經常碰見,是一種常見的模式,其可分爲三種:靜態工廠模式、工廠方法模式、抽象工廠模式
工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。
1、簡單工廠模式
也叫靜態工廠模式,用靜態方法實現,其創建的對象具有一定的特性,比如說是某類的派生或者某接口的實現。
簡單工廠模式的組成:
(1) 工廠類角色:模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現
(2) 抽象產品角色:它一般是具體產品繼承的父類或者實現的接口。在java中由接口或者抽象類來實現
(3)具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現
2、工廠方法模式
是對簡單工廠模式進行了抽象化,符合“開閉原則”,實現了可擴展。
工廠方法(FactoryMethod)模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成爲一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。
工廠方法模式的組成
(1)抽象工廠角色:這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現。
(2)具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。
(3)抽象產品角色:它是具體產品繼承的父類或者是實現的接口。在java中一般有抽象類或者接口來實現。
(4)具體產品角色:具體工廠角色所創建的對象就是此角色的實例。在java中由具體的類來實現。
3、抽象工廠模式
抽象工廠模式的目的是:給客戶端提供一個接口,可以創建多個產品族中的產品對象
使用抽象工廠模式需要滿足以下條件:
(1) 系統中有多個產品族,而系統一次只可能消費其中一族產品。
(2) 同屬於同一個產品族的產品以其使用。

抽象工廠模式的組成:
(1)抽象工廠角色:這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現。
(2)具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。在java中它由具體的類來實現。
(3)抽象產品角色:它是具體產品繼承的父類或者是實現的接口。在java中一般有抽象類或者接口來實現。
(4)具體產品角色:具體工廠角色所創建的對象就是此角色的實例。在java中由具體的類來實現。


發佈了68 篇原創文章 · 獲贊 75 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章