單例設計模式(多例設計模式)主要是一種控制例項化物件產生個數的設計操作。
單例設計:
如果說現在有乙個程式類,假設該程式類的定義如下:
class
singleton
}public
class
stringdemo
}
但是由於某些要求,現在要求singleton這個類只允許提供有乙個例項化。那麼此時首先應該控制的就是構造方法,因為所有的新的例項化物件產生了,那麼一定要呼叫構造方法,如果構造方法「沒有了」,那麼自然就無法產生例項化物件了。
範例:構造方法私有化
class
singleton//
構造方法私有化了
public
void
print()
}public
class
stringdemo
}
宣告私有化沒有錯,例項化有錯。
但是現在是有乙個嚴格要求的:必須產生有乙個例項化物件,所以現在就必須想辦法產生乙個例項化物件交給客戶端去呼叫。那麼這個時候分析如下。
1、private訪問許可權的主要特點在於:不能在類外部訪問,但是可以在類本身呼叫,所以現在可以考慮在類的內部呼叫構造。
class
singleton//
構造方法私有化了
public
void
print()
}public
class
stringdemo
}
2、此時singleton類內部的instance屬於乙個普通的屬性,而普通屬性是在有例項化物件產生之後才會被呼叫的,那麼這個時候外部無法產生例項化物件,所以這個屬性就不能夠訪問到了,那麼就必須如何在沒有例項化物件的時候獲取此屬性,那麼只有乙個static屬性可以。
class
singleton//
構造方法私有化了
public
void
print()
}public
class
stringdemo
}
3、類中的屬性應該封裝後使用,所以理論上此時的instance需要被封裝起來,那麼就需要乙個static方法獲得。
class
singleton//
構造方法私有化了
public
static
singleton
getinstance()
public
void
print()
}public
class
stringdemo
}
4、整個**從頭強調的只有乙個例項化物件,這個時候雖然提供有static的例項化物件,但是這個物件依然可以重新例項化,所以需要保證singleton類內部的instance無法再次例項化,那麼應該使用final定義。
class
singleton//
構造方法私有化了
public
static
singleton
getinstance()
public
void
print()
}public
class
stringdemo
}
在很多情況下有些類是不需要重複產生物件的,例如:如果乙個程式啟動,那麼現在肯定需要由乙個類負責儲存有一些程式載入資料資訊。
對於單例設計模式也分成兩種:懶漢式、餓漢式。在之前所定義的都屬於餓漢式。在系統載入類的時候就會自動提供有singleton類的例項化,而還有一種懶漢式,在第一次使用的時候進行例項化物件處理。
範例:將單例修改為懶漢式
class
singleton//
構造方法私有化了
public
static
singleton
getinstance()
return
instance;}
public
void
print()
}public
class
stringdemo
}
面試題:請編寫乙個singleton程式,並說明其主要特點?
與單例設計對應的還有乙個稱為多例設計,單例設計指的是只保留有乙個例項化物件,而多例設計指的是可以保留有多個例項化物件。例如:如果現在要定義乙個描述性別的類,那麼該物件只有兩個:男、女。或者描述顏色基色的類,可以使用:紅色、綠色、藍色。 這種情況下就可以利用多例設計。
範例:例項
class
color
public
static
color
getinstance
(string
color)}
public
string
tostring()
}public
class
stringdemo
}
多例設計與單例設計的本質是相同的,一定都會在內部提供有static方法以返回例項化物件。 Java 單例 多例設計模式
單例和多例的設計模式特點就是構造方法被私有化,外部無法直接用 new 例項化。只能通過呼叫類內部提供的靜態方法取得例項。單例設計模式 餓漢式單例設計模式class singleton 定義全域性常量的時候直接例項化 private static final singleton instance ne...
設計模式(五) 單例 多例模式
單例模式 singleton 保證類僅有乙個例項,並且提供乙個訪問它的全域性訪問點。多例模式 multitude pattern 負責建立 管理自己的多個例項,並且提供它們的全域性訪問點。單例模式 多例模式 不好的實現方法一 public class singleton else return si...
設計模式之單例設計模式,多例設計模式
所謂的單例設計模式就是指乙個類只允許產生乙個例項化物件。那麼如何保證乙個類只產生乙個例項化物件呢?我們都知道,所有的類都會預設生成乙個無參構造,這個無參構造外部可以隨意呼叫,如果我們要限制在外部產生物件,那麼就可以自己寫乙個私有的構造方法,這樣預設生成的無參構造將不再產生,這個時候再進行物件例項化的...