程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 淺析Java設計形式編程中的單例形式和簡略工場形式

淺析Java設計形式編程中的單例形式和簡略工場形式

編輯:關於JAVA

淺析Java設計形式編程中的單例形式和簡略工場形式。本站提示廣大學習愛好者:(淺析Java設計形式編程中的單例形式和簡略工場形式)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析Java設計形式編程中的單例形式和簡略工場形式正文


單例形式
念頭
有時刻只要一個類的實例是很主要的。好比,一個體系應當只要一個窗口治理實例。

單例形式是最簡略設計形式:類擔任實例化本身,確保只要一個實例,而且供給一個拜訪這個實例的進口。

目標
1. 確保只要一個實例被創立。
2. 供給拜訪這個實例的進口。

應用final確保被創立一次,private的結構函數確保不被實例化。public的getInstance辦法確保內部可以或許拜訪。上面是餓漢形式:

public class Singleton { 
  private static final Singleton instance = new Singleton(); 
  
  private Singleton() {} 
  
  public static Singleton getInstance() { 
    return instance; 
  } 
} 


懶漢形式:

public class SingletonDemo { 
    private static volatile SingletonDemo instance = null; 
  
    private SingletonDemo() {    } 
  
    public static SingletonDemo getInstance() { 
        if (instance == null) { 
            synchronized (SingletonDemo .class){ 
                if (instance == null) { 
                    instance = new SingletonDemo (); 
                } 
           } 
        } 
        return instance; 
    } 
} 


實用場景和實例
1. Logger類,避免每次打印log的應用都創立一個Logger實例。
2. 掌握類,普通全部體系都只要一個掌握實例。

詳細成績和完成
1. 線程平安,硬朗的單例形式應當是線程平安的。
2. 懶漢形式應用了兩重鎖機制。
3. 餓漢形式應用靜態變量,在法式加載時就實例化,包管了只要一個實例。
4. 籠統工場和工場辦法平日被設計成單例形式,以包管只要一個工場。
5. 應用序列化和反序列化時,會有多個實例被創立,應用readResolve函數防止這個情形,不外最好是不要應用序列化。

   public class Singleton implements Serializable { 
... 
 
// This method is called immediately after an object of this class is deserialized. 
// This method returns the singleton instance. 
protected Object readResolve() { 
  return getInstance(); 
} 
} 


症結點
1. 在多線程的法式中,要留意數據的同步。
2. 序列化時要應用readResolve辦法前往實例,防止多個對象被創立。
3. 假如被多個類加載器加載時,會有多個實例被創立。


簡略工場形式
念頭
簡略工場形式是籠統工場和工場辦法的基本和初步完成。

目標
1. 不向客戶洩漏對象實例化的細節。
2. 經由過程通用接口創立對象。

完成

完成異常簡略:
1. Client須要Product時,不應用new來創立,而是供給 Product 描寫給Factory,讓 Factory 供給一個新的 Product 。
2. Factory實例化一個Product給Client。
3. Client應用籠統Product,而不關懷Product的詳細完成。

實例
1. 繪制外形的畫圖法式。外形就是Product接口,三角形這些是Concrete Product,我們可以創立一個工場,然後依據客戶的描寫創立關於的產物。不外添加新的外形時,我們須要修正工場類。

詳細成績和完成
1. 添加新產物時,須要修正工場。

public class ProductFactory{ 
  public Product createProduct(String ProductID){ 
    if (id==ID1) 
      return new OneProduct(); 
    if (id==ID2)  
      return new AnotherProduct(); 
    ... // so on for the other Ids 
     
    return null; //if the id doesn't have any of the expected values 
  } 
  ... 
} 

普通我們經由過程if語句斷定產物描寫,並實例化分歧的產物,有新的產物時,我們須要增長新的斷定。經由過程籠統工場形式可以處理這個成績。

總結
1. 當你確切須要工場形式時才應用,否則只是增長法式的龐雜度,好比多種對象有類似的根本類型時,可以斟酌應用簡略工場形式來同一創立對象。
2. 簡略工場有比擬多的斷定分支語句,違背了開閉准繩的對修正封閉的准繩,所以,明智的做法是,對一些固定和簡略法式應用簡略工場形式,對一些龐雜和須要常常擴大的法式,應用籠統工場形式或許工場辦法形式。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved