導航:首頁 > 編程語言 > java單例工廠

java單例工廠

發布時間:2022-07-01 07:01:34

1. 求一小java程序,用到三種設計模式,工廠、單例等等,三種就夠

這個程序沒法小。另外,單例是工廠的一個特例。嚴格說,是一個模式。可以嘗試,用工廠模式+代理模式+合成模式寫一個資料庫連接池。工廠模式管理資料庫鏈接,代理模式用來處理connection類的close等需要代理的方法,合成模式用來處理和封裝代理對象和原對象的關聯管理。可以下載一個資料庫連接池的源碼。一般的資料庫連接池的源碼一定至少包含這三種模式。

2. java中工廠實例就是工廠對象對嗎,和普通實例普通對象有什麼區別

工廠實例就是工廠對象,但是一般來說工廠實例都採取單例模式,也就是說獲取工廠實例並不是通過自己new對象的方式而是由工廠來創建實例給我們使用.普通的對象則是我們可以自由new對象的.

3. 求一個完整的單例工廠模式的實現

樓上各位的都不安全,用在伺服器上的單例工廠必須考慮線程安全,完整的例子如下:
public class Test {
private static Test instance = null;
private Test()
{}
synchronized public static Test getInstance()
{
if(instance == null)
instance = new Test();
return instance;
}
}

4. JAVA單例模式有哪些

一、懶漢式單例
在類載入的時候不創建單例實例。只有在第一次請求實例的時候的時候創建,並且只在第一次創建後,以後不再創建該類的實例。
public
class
LazySingleton
{
/**
*
私有靜態對象,載入時候不做初始化
*/
private
static
LazySingleton
m_intance=null;
/**
*
私有構造方法,避免外部創建實例
*/
private
LazySingleton(){
}
/**
*
靜態工廠方法,返回此類的唯一實例.
*
當發現實例沒有初始化的時候,才初始化.
*/
synchronized
public
static
LazySingleton
getInstance(){
if(m_intance==null){
m_intance=new
LazySingleton();
}
return
m_intance;
}
}
二、餓漢式單例
在類被載入的時候,唯一實例已經被創建。
public
class
EagerSingleton
{
/**
*
私有的(private)唯一(static
final)實例成員,在類載入的時候就創建好了單例對象
*/
private
static
final
EagerSingleton
m_instance
=
new
EagerSingleton();
/**
*
私有構造方法,避免外部創建實例
*/
private
EagerSingleton()
{
}
/**
*
靜態工廠方法,返回此類的唯一實例.
*
@return
EagerSingleton
*/
public
static
EagerSingleton
getInstance()
{
return
m_instance;
}
}
**************************************************************************************
懶漢方式,指全局的單例實例在第一次被使用時構建;
餓漢方式,指全局的單例實例在類裝載時構建
**************************************************************************************
三、登記式單例
這個單例實際上維護的是一組單例類的實例,將這些實例存放在一個Map(登記薄)中,對於已經登記過的實例,則從工廠直接返回,對於沒有登記的,則先登記,而後返回。
public
class
RegSingleton
{
/**
*
登記薄,用來存放所有登記的實例
*/
private
static
Map
m_registry
=
new
HashMap();
//在類載入的時候添加一個實例到登記薄
static
{
RegSingleton
x
=
new
RegSingleton();
m_registry.put(x.getClass().getName(),
x);
}
/**
*
受保護的默認構造方法
*/
protected
RegSingleton()
{
}
/**
*
靜態工廠方法,返回指定登記對象的唯一實例;
*
對於已登記的直接取出返回,對於還未登記的,先登記,然後取出返回
*
@param
name
*
@return
RegSingleton
*/
public
static
RegSingleton
getInstance(String
name)
{
if
(name
==
null)
{
name
=
"RegSingleton";
}
if
(m_registry.get(name)
==
null)
{
try
{
m_registry.put(name,
(RegSingleton)
Class.forName(name).newInstance());
}
catch
(InstantiationException
e)
{
e.printStackTrace();
}
catch
(IllegalAccessException
e)
{
e.printStackTrace();
}
catch
(ClassNotFoundException
e)
{
e.printStackTrace();
}
}
return
m_registry.get(name);
}
/**
*
一個示意性的商業方法
*
@return
String
*/
public
String
about()
{
return
"Hello,I
am
RegSingleton!";
}
}

5. 求問一個單例+工廠模式的實現(java)

參數是從界面上傳遞過來的。你是不是吧每個參數都搞成一個類了。如果這樣的話,雖然設計做到了單一責任原則,但是這樣未免也太死板了。感覺你能不能合並下。就算是動態參數界面也沒這么多參數啊。我靠。長見識了。什麼項目啊。
即使你現在滿足了需求了(需要多大的工作力量啊)。將來需求一變,你就死了。這個項目可能就廢了。

6. java筆試題中單例模式,工廠模式簡單介紹下。還有餓漢和懶漢分別實現一個

單例模式就是確保一個類只能有一個實例,並且提供一個全局訪問點
工廠模式有三個吧,簡單工廠,工廠方法以及抽象工廠。簡單工廠不能算為一個模式,所以我只說工廠方法和抽象工廠。
工廠方法定義了一個創建對象的介面,但有子類決定要實例化的是哪一個,工廠方法把實例化推遲到子類。
而抽象工廠則是提供一個介面,用於創建相關或依賴對象的家族,而不需要明確指定具體類。『

7. java 工廠模式 單例模式

工廠模式分簡單工廠、工廠方法、抽象工廠 三類。
很復雜。
看這本電子書: Java與模式(清晰書簽版).pdf
下載不到的話加QQ:844576121
傳給你

8. java中的工廠模式和單例模式很有用嗎我對模板不怎麼理解,剛學,看不太懂!咋辦

工廠模式基本是每個項目都會用到的,spring的IOc注入其實就是工廠模式的一個應用。單例模式也很常用,但是也清楚你的業務是否真正需要用到單例,單例顧名思義就是在內存保存一個對象,以保證整個系統數據的一致性,一般來說,要用到單例的適合會結合工廠模式同時使用的

9. java常用的幾種單例模式(懶漢式,餓漢式

單件模式用途:
單件模式屬於工廠模式的特例,只是它不需要輸入參數並且始終返回同一對象的引用。
單件模式能夠保證某一類型對象在系統中的唯一性,即某類在系統中只有一個實例。它的用途十分廣泛,打個比方,我們開發了一個簡單的留言板,用戶的每一次留言都要將留言信息寫入到資料庫中,最直觀的方法是沒次寫入都建立一個資料庫的鏈接。這是個簡單的方法,在不考慮並發的時候這也是個不錯的選擇。但實際上,一個網站是並發的,並且有可能是存在大量並發操作的。如果我們對每次寫入都創建一個資料庫連接,那麼很容易的系統會出現瓶頸,系統的精力將會很多的放在維護鏈接上而非直接查詢操作上。這顯然是不可取的。
如果我們能夠保證系統中自始至終只有唯一一個資料庫連接對象,顯然我們會節省很多內存開銷和cpu利用率。這就是單件模式的用途。當然單件模式不僅僅只用於這樣的情況。在《設計模式:可復用面向對象軟體的基礎》一書中對單件模式的適用性有如下描述:
1、當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。
2、當這個唯一實例應該是通過子類化可擴展的,並且客戶應該無需更改代碼就能使用一個擴展的實例時。
下面對單件模式的懶漢式與餓漢式進行簡單介紹:
1、餓漢式:在程序啟動或單件模式類被載入的時候,單件模式實例就已經被創建。
2、懶漢式:當程序第一次訪問單件模式實例時才進行創建。
如何選擇:如果單件模式實例在系統中經常會被用到,餓漢式是一個不錯的選擇。

10. JAVA單例模式的幾種實現方法

JAVA
單例模式的幾種實現方法
1.餓漢式單例類
package
pattern.singleton;
//
餓漢式單例類
.
在類初始化時,已經自行實例化
public
class
Singleton1
{
//
私有的默認構造子
private
Singleton1()
{}
//
已經自行實例化
private
static
final
Singleton1
single
=
new
Singleton1();
//
靜態工廠方法
public
static
Singleton1
getInstance()
{
return
single;
}
}
2.
懶漢式單例類
package
pattern.singleton;
//
懶漢式單例類
.
在第一次調用的時候實例化
public
class
Singleton2
{
//
私有的默認構造子
private
Singleton2()
{}
//
注意,這里沒有
final
private
static
Singleton2
single;
//
只實例化一次
static
{
single
=
new
Singleton2();
}
//
靜態工廠方法
public
synchronized
static
Singleton2
getInstance()
{
if
(single
==
null
)
{
single
=
new
Singleton2();
}
return
single;
}
}
在上面給出懶漢式單例類實現里對靜態工廠方法使用了同步化,以處理多線程環境。有些設計師在這里建議使用所謂的
"
雙重檢查成例
".
必須指出的是,
"
雙重檢查成例
"
不可以在
Java
語言中使用。不十分熟悉的讀者,可以看看後面給出的小節。

樣,由於構造子是私有的,因此,此類不能被繼承。餓漢式單例類在自己被載入時就將自己實例化。即便載入器是靜態的,在餓漢
式單例類被載入時仍會將自己實例化。單從資源利用效率角度來講,這個比懶漢式單例類稍差些。從速度和反應時間角度來講,

比懶漢式單例類稍好些。然而,懶漢式單例類在實例化時,必須處
理好在多個線程同時首次引用此類時的訪問限制問題,特別是當單例類作為資源控制器,在實例化時必然涉及資源初始化,而資源
初始化很有可能耗費時間。這意味著出現多線程同時首次引用此類的機率變得較大。
餓漢式單例類可以在
Java
語言內實現,
但不易在
C++
內實現,因為靜態初始化在
C++
里沒有固定的順序,因而靜態的
m_instance
變數的初始化與類的載入順序沒有保證,可能會出問題。這就是為什麼
GoF
在提出單例類的概念時,舉的例子是懶
漢式的。他們的書影響之大,以致
Java
語言中單例類的例子也大多是懶漢式的。實際上,本書認為餓漢式單例類更符合
Java

言本身的特點。
3.
登記式單例類
.
package
pattern.singleton;

import
java.util.HashMap;
import
java.util.Map;
//
登記式單例類
.
//
類似
Spring
裡面的方法,將類名注冊,下次從裡面直接獲取。
public
class
Singleton3
{
private
static
Map<String,Singleton3>
map
=
new
HashMap<String,Singleton3>();
static
{
Singleton3
single
=
new
Singleton3();
map.put(single.getClass().getName(),
single);
}
//
保護的默認構造子
protected
Singleton3(){}
//
靜態工廠方法
,
返還此類惟一的實例
public
static
Singleton3
getInstance(String
name)
{
if
(name
==
null
)
{
name
=
Singleton3.
class
.getName();
System.out.println("name
==
null"+"--->name="+name);
}
if
(map.get(name)
==
null
)
{
try
{
map.put(name,
(Singleton3)
Class.forName(name).newInstance());
}
catch
(InstantiationException
e)
{
e.printStackTrace();
}
catch
(IllegalAccessException
e)
{
e.printStackTrace();
}
catch
(ClassNotFoundException
e)
{
e.printStackTrace();
}
}
return
map.get(name);
}
//
一個示意性的商業方法
public
String
about()
{
return
"Hello,
I
am
RegSingleton.";
}
public
static
void
main(String[]
args)
{
Singleton3
single3
=
Singleton3.getInstance(
null
);
System.out.println(single3.about());
}
}

閱讀全文

與java單例工廠相關的資料

熱點內容
androidsdkr25下載 瀏覽:12
哪位程序員的名字是誰 瀏覽:568
蘋果手機底部怎麼放5個app 瀏覽:915
壓縮機出涼風 瀏覽:823
不能從文件夾看到迅雷 瀏覽:139
編程處理表格有意義嗎 瀏覽:438
java字元串回車換行 瀏覽:155
普通分體空調是什麼壓縮機 瀏覽:824
數控車床牙刀滾花編程實例 瀏覽:944
辦公室pdf 瀏覽:279
自動化測量和編程 瀏覽:588
827編程教學 瀏覽:726
跳轉到文件夾 瀏覽:518
文件夾怎麼解壓並安裝 瀏覽:406
壓縮機維修論壇 瀏覽:8
加密碼的筆記本app 瀏覽:685
伺服器ac是怎麼填 瀏覽:474
編譯原理短語可以是句子嗎 瀏覽:652
電腦版燈塔app怎麼下載 瀏覽:554
我的魂斗羅歸來怎麼安卓轉蘋果 瀏覽:150