1、培訓(xùn)過程中,如有部分內(nèi)容理解不透或消化不好,可免費(fèi)在以后培訓(xùn)班中重聽; 2、培訓(xùn)結(jié)束后,授課老師留給學(xué)員聯(lián)系方式,保障培訓(xùn)效果,免費(fèi)提供課后技術(shù)支持。 3、培訓(xùn)合格學(xué)員可享受免費(fèi)推薦就業(yè)機(jī)會。
一、概述
多例模式(Multiton ?Pattern),這種設(shè)計(jì)模式也屬于對象創(chuàng)建型模式,本質(zhì)上就是單例模式的推廣
定義:
一個類有多個實(shí)例且由類本身創(chuàng)建和管理自己的實(shí)例,并向外部提供訪問點(diǎn)。
二、理解
關(guān)鍵點(diǎn):
1)一個類可有多個實(shí)例
如果一個類僅有一個實(shí)例,就是單例模式(所以單例模式是多例模式的特例)
如果一個類有有限個實(shí)例,稱為有上限多例(如枚舉)
如果一個類的實(shí)例個數(shù)不確定,稱為無上限多例
2)所有實(shí)例是由類自己創(chuàng)建
即所有實(shí)例外部不能創(chuàng)建(私有化構(gòu)造器)
3)所有實(shí)例都是由類自己管理(什么時候創(chuàng)建,怎么創(chuàng)建,存放地點(diǎn),什么時候銷毀)
所以實(shí)例要保存在類的靜態(tài)量中
4)要向外部提供訪問點(diǎn)(靜態(tài)變量/靜態(tài)方法)
提供一個公開的靜態(tài)方法訪問即可
注:普通的類也可以有多個實(shí)例,但其實(shí)例一般是外部new創(chuàng)建和管理的,這種不是多例模式
三、實(shí)現(xiàn)
1、有上限的多例類
分幾種情況
a)如果此類實(shí)例數(shù)量較小,可直接使用靜態(tài)變量一個一個保存即可
如一副麻將牌中只有兩個骰子,這可以創(chuàng)建一個骰子類,有兩個實(shí)例
b)如果此類實(shí)例數(shù)量較多,這可以使用靜態(tài)的聚集(如數(shù)組,集合等)來保存
如一副撲克牌有54張,這可以創(chuàng)建一個Card類,有54個實(shí)例
?
2、無上限的多例類
這里的無上限不是無限,而是指無法確定實(shí)例的個數(shù),如
一個顏色類,不同的實(shí)例表示不同的顏色,我們不確定外部會使用哪些顏色,外部一般也不可能使用全部顏色
所以沒有必要提前創(chuàng)建所有的顏色實(shí)例,而是使用公開靜態(tài)變量提供常用顏色訪問,
公開靜態(tài)方法提供所有顏色訪問且提供緩沖功能(再次訪問同一個顏色,則不新建)
四、總結(jié)
多例模式的重點(diǎn)是實(shí)例是由類自己創(chuàng)建和管理,這是區(qū)分多例模式的最重要的一點(diǎn)
javase的API中使用到多例模式的有
java.util.ResourceBundle
java.util.Local
java.text.NumberFormat
java.awt.Color
....