getInstance與new的區別【百度】

getInstance編輯

本詞條缺少名片圖,補充相關內容使詞條更完整,還能快速升級,趕緊來編輯吧!
getInstance是一個函數。在java中,可以使用這種方式使用單例模式創建類的實例,所謂單例模式就是一個類有且只有一個實例,不像object ob=new object();的這種方式去實例化後去使用。
外文名
getInstance
用    法
是個服務類,定義一次
解    決
這個矛盾的方法
可能會出現
pro1和pro2各實例化一次

1GetInstance()編輯

在java中,可以使用這種方式使用單例模式創建類的實例,所謂單例模式就是一個類有且只有一個實例,不像object ob=new object();的這種方式去實例化後去使用。

2GetInstance()的用法編輯

在寫程序庫代碼時,有時有一個類需要被所有的其它類使用,但又要求這個類只能被實例化一次,是個服務類,定義一次,其它類使用同一個這個類的實例。
例如:
class A
{
public:
A(void);
…..
}
如果在每一個需要A的類中都聲明一個A類的對象,那麼會導致有N個類,每個A類的定義都不一樣,但是這個A類是服務類,又只能定義一次,定義多個A類會導致A類有多個不同的內存地址。
解決這個矛盾的方法:
  1. 定義一個A的全局類對象,其它類共同使用這個實例化對象,這樣保證A只實例化一次,使用extern A a聲明一次,在源文件中定義A a即可;
但這種方式有一個問題,就是工程之間的訪問,例如pro1中有A類,pro2需要使用A類,這樣就不能完全保證A類只實例化一次,可能會出現pro1和pro2各實例化一次。
  1. 定義靜態的實例化類(Singleton),如下:
class A
{
public:
A(void);
static A* GetInstance()
{
static A* a = NULL;
if(a == null)
{
a = new A;
};
return a;
}
……
}
這樣只要包含這個頭文件,
A::GetInstance()->…..
這樣就保證只實例化一次。

3GetInstance與new編輯

對象的實例化方法,也是比較多的,最常用的方法是直接使用new,而這是最普通的,如果要考慮到其它的需要,如單實例模式,層次間調用等等。直接使用new就不可以實現好的設計,這時候需要使用間接使用new,即很多人使用的GetInstance方法。這是一個設計方式的代表,而不僅僅指代一個方法名。[1] 

new的使用:

如Object _object = new Object(),這時候,就必須要知道有第二個Object的存在,而第二個Object也常常是在當前的應用程序域中的,可以被直接調用的

GetInstance的使用:

在主函數開始時調用,返回一個實例化對象,此對象是static的,在內存中保留着它的引用,即內存中有一塊區域專門用來存放靜態方法和變量,可以直接使用,調用多次返回同一個對象。

兩者區別對照:

大部分類(非抽象類/接口/屏蔽了constructor的類)都可以用new,new就是通過生產一個新的實例對象,或者在棧上聲明一個對象 ,每部分的調用用的都是一個新的對象。
getInstance是少部分類纔有的一個方法,各自的實現也不同。getInstance在單例模式(保證一個類僅有一個實例,並提供一個訪問它的全局訪問點)的類中常見,用來生成唯一的實例,getInstance往往是static的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章