當前位置:首頁 » 網購平台 » 購物車單例模式
擴展閱讀
寧波奧德賽優惠價格 2021-03-15 14:26:02
丹尼斯購物卡能掛失么 2021-03-15 14:25:58
淘寶購物指紋驗證失敗 2021-03-15 14:24:44

購物車單例模式

發布時間: 2021-02-02 23:01:37

⑴ 什麼叫單例模式,如何實現,有什麼作用

就是只有一個實例,最簡單的單例模式可以用static來實現。

比如下面的_Context變數就是用了單利模式,下面的代碼就是外面想調用_Context時,如果_Context已經實例化,那麼直接返回,如果沒實例化,就實例化它再返回。全局只有一個_Context

比如
public class EESGateway
{
private static EESDatabaseDataContext _Context = null; //EESDatabasDataContex Instance
private const string databaseName = "EESDatabase"; //Database name

/// <summary>
/// Return EESDatabaseDataContext instance.
/// </summary>
/// <returns>EESDatabaseDataContext instance</returns>
public static EESDatabaseDataContext DataContext()
{
if (_Context == null)
{
lock (typeof(EESGateway))
{
//formate a new string to store the connectionString
String connectionString = ConfigurationManager.ConnectionStrings["EESDatabase"].ConnectionString;

//create a dataContext using the connectionString above
_Context = new EESDatabaseDataContext(connectionString);
}
}
return _Context;
}
}

⑵ 什麼是單例模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。

通過單例模式可以保證系統中,應用該模式的類一個類只有一個實例。即一個類只有一個對象實例。

單例模式是設計模式中最簡單的形式之一。這一模式的目的是使得類的一個對象成為系統中的唯一實例。

要實現這一點,可以從客戶端對其進行實例化開始。因此需要用一種只允許生成對象類的唯一實例的機制,「阻止」所有想要生成對象的訪問。

使用工廠方法來限制實例化過程。這個方法應該是靜態方法(類方法),因為讓類的實例去生成另一個唯一實例毫無意義。

(2)購物車單例模式擴展閱讀:

優缺點:

優點

一、實例控制

單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。

二、靈活性

因為類控制了實例化過程,所以類可以靈活更改實例化過程。

缺點

一、開銷

雖然數量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。

二、可能的開發混淆

使用單例對象(尤其在類庫中定義的對象)時,開發人員必須記住自己不能使用new關鍵字實例化對象。因為可能無法訪問庫源代碼,因此應用程序開發人員可能會意外發現自己無法直接實例化此類。

三、對象生存期

不能解決刪除單個對象的問題。在提供內存管理的語言中(例如基於.NET Framework的語言),只有單例類能夠導致實例被取消分配,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除對象實例,但這樣會導致單例類中出現懸浮引用。

參考資料:網路---單例模式

⑶ java單例模式出現空指針問題。

1.首先單例模式,構造方法要私有化,private Cart (){} ;

2.private Map<GoodsBean,Integer> cartMap;你不分配空間給map,就會報空指針異常,要

3.實現線程安全的單例模式,不難

//雙重檢查實現單例
publicclassSingleton{
;
privateSingleton(){}
(){
if(singleton==null){
synchronized(Singleton.class){
if(singleton==null){
singleton=newSingleton();
}
}
}
returnsingleton;
}
}

4.Double-Check概念對於多線程開發者來說不會陌生,如代碼中所示,我們進行了兩次if (singleton == null)檢查,這樣就可以保證線程安全了。這樣,實例化代碼只用執行一次,後面再次訪問時,判斷if (singleton == null),直接return實例化對象。

優點:線程安全;延遲載入;效率較高。

⑷ 什麼是單例模式

例模式可以說是GOF設計模式中最為簡單的模式,也是背負罵名最多的模專式。不過一直以屬來,我對許多類似關於它是最爛和反模式的評價卻不盡以為然。 模式本身很簡單,除了牽涉多線程安全問題引起的一點羅唆外。所以,我不太想討論GOF提供的關於該模式的參考實現。我所關注的是它背後帶來的對問題的看法和思考方式。 我們先看看單例模式出現的背景很存在的意義。單例模式通俗來講就是確保類只有一個實例。那麼好,我們問一下,為什麼要確保類只有一個實例呢?其實無非是兩個方面的作用:一、想控制資源的使用,它又體現在兩個方面,其中之一是控制實例數目的產生來節約資源,其二通過線程同步控制資源的並發訪問;二、想作為一種通信媒介,在不建立直接關聯的條件下讓不相關的兩個程序進行通信,尤其是多線程。第二點,我說的有些抽象,簡單講吧,就類似於大家基於一個黑板討論東西,而不關心參與討論的對象。單例就取了黑板的作用。

⑸ 什麼是單例模式希望有個運用單例模式的類的例子。

單例模式可以說是GOF設計模式中最為簡單的模式,也是背負罵名最多的模式。專不過一直以來,我對許多類屬似關於它是最爛和反模式的評價卻不盡以為然。
模式本身很簡單,除了牽涉多線程安全問題引起的一點羅唆外。所以,我不太想討論GOF提供的關於該模式的參考實現。我所關注的是它背後帶來的對問題的看法和思考方式。
我們先看看單例模式出現的背景很存在的意義。單例模式通俗來講就是確保類只有一個實例。那麼好,我們問一下,為什麼要確保類只有一個實例呢?其實無非是兩個方面的作用:一、想控制資源的使用,它又體現在兩個方面,其中之一是控制實例數目的產生來節約資源,其二通過線程同步控制資源的並發訪問;二、想作為一種通信媒介,在不建立直接關聯的條件下讓不相關的兩個程序進行通信,尤其是多線程。第二點,我說的有些抽象,簡單講吧,就類似於大家基於一個黑板討論東西,而不關心參與討論的對象。單例就取了黑板的作用。

⑹ 單例模式的好處和缺點為什麼要用單例模式詳細才給分

【單例模式含義】
單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。
【採用單例模式動機、原因】
對於系統中的某些類來說,只有一個實例很重要,例如,一個系統中可以存在多個列印任務,但是只能有一個正在工作的任務;一個系統只能有一個窗口管理器或文件系統;一個系統只能有一個計時工具或ID(序號)生成器。如在Windows中就只能打開一個任務管理器。如果不使用機制對窗口對象進行唯一化,將彈出多個窗口,如果這些窗口顯示的內容完全一致,則是重復對象,浪費內存資源;如果這些窗口顯示的內容不一致,則意味著在某一瞬間系統有多個狀態,與實際不符,也會給用戶帶來誤解,不知道哪一個才是真實的狀態。因此有時確保系統中某個對象的唯一性即一個類只能有一個實例非常重要。
如何保證一個類只有一個實例並且這個實例易於被訪問呢?定義一個全局變數可以確保對象隨時都可以被訪問,但不能防止我們實例化多個對象。一個更好的解決辦法是讓類自身負責保存它的唯一實例。這個類可以保證沒有其他實例被創建,並且它可以提供一個訪問該實例的方法。這就是單例模式的模式動機。
【單例模式優缺點】
【優點】
一、實例控制
單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。
二、靈活性
因為類控制了實例化過程,所以類可以靈活更改實例化過程。
【缺點】
一、開銷
雖然數量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。
二、可能的開發混淆
使用單例對象(尤其在類庫中定義的對象)時,開發人員必須記住自己不能使用new關鍵字實例化對象。因為可能無法訪問庫源代碼,因此應用程序開發人員可能會意外發現自己無法直接實例化此類。
三、對象生存期
不能解決刪除單個對象的問題。在提供內存管理的語言中(例如基於.NET Framework的語言),只有單例類能夠導致實例被取消分配,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除對象實例,但這樣會導致單例類中出現懸浮引用。

⑺ 什麼叫單例模式 能給舉個例子嗎 們

定義:
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。

在很多操作中,比如建立目錄 資料庫連接都需要這樣的單線程操作。

還有, singleton能夠被狀態化; 這樣,多個單態類在一起就可以作為一個狀態倉庫一樣向外提供服務,比如,你要論壇中的帖子計數器,每次瀏覽一次需要計數,單態類能否保持住這個計數,並且能synchronize的安全自動加1,如果你要把這個數字永久保存到資料庫,你可以在不修改單態介面的情況下方便的做到。

另外方面,Singleton也能夠被無狀態化。提供工具性質的功能,

Singleton模式就為我們提供了這樣實現的可能。使用Singleton的好處還在於可以節省內存,因為它限制了實例的個數,有利於Java垃圾回收(garbage collection)。

我們常常看到工廠模式中類裝入器(class loader)中也用Singleton模式實現的,因為被裝入的類實際也屬於資源。

如何使用?
一般Singleton模式通常有幾種形式:

public class Singleton {

private Singleton(){}

//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用

private static Singleton instance = new Singleton();

//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}

第二種形式:

public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton getInstance() {

//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }

}

使用Singleton.getInstance()可以訪問單態類。

上面第二中形式是lazy initialization,也就是說第一次調用時初始Singleton,以後就不用再生成了。

注意到lazy initialization形式中的synchronized,這個synchronized很重要,如果沒有synchronized,那麼使用getInstance()是有可能得到多個Singleton實例。關於lazy initialization的Singleton有很多涉及double-checked locking (DCL)的討論,有興趣者進一步研究。

一般認為第一種形式要更加安全些。

使用Singleton注意事項:
有時在某些情況下,使用Singleton並不能達到Singleton的目的,如有多個Singleton對象同時被不同的類裝入器裝載;在EJB這樣的分布式系統中使用也要注意這種情況,因為EJB是跨伺服器,跨JVM的。

我們以SUN公司的寵物店源碼(Pet Store 1.3.1)的ServiceLocator為例稍微分析一下:

在Pet Store中ServiceLocator有兩種,一個是EJB目錄下;一個是WEB目錄下,我們檢查這兩個ServiceLocator會發現內容差不多,都是提供EJB的查詢定位服務,可是為什麼要分開呢?仔細研究對這兩種ServiceLocator才發現區別:在WEB中的ServiceLocator的採取Singleton模式,ServiceLocator屬於資源定位,理所當然應該使用Singleton模式。但是在EJB中,Singleton模式已經失去作用,所以ServiceLocator才分成兩種,一種面向WEB服務的,一種是面向EJB服務的。

Singleton模式看起來簡單,使用方法也很方便,但是真正用好,是非常不容易,需要對Java的類 線程 內存等概念有相當的了解。

⑻ 各位java web大神,求幫忙看個超小的demo,實現一個簡單的購物車功能,出現了很讓人費解的問題,不看後悔

我運行了你的代碼獲取到的是同一個session啊,沒問題啊

⑼ 如何實現單例模式

這個模式保護類的創建過程來確保只有一個實例被創建,它通過設置類的構造方法為私有來達到這個目的。 要獲得類的實例,單例類可以提供一個方法,如getInstance,來返回類的實例。該方法是唯一可以訪問類來創建實例的方法。 下面是單例的一個例子:Java代碼publicclassSingletonPattern{;privateSingletonPattern(){}publicstatic synchronized SingletonPatterngetInstance(){if(instance==null){instance=newSingletonPattern();}returninstance;}} 當我們要實現單例的時候,有如下的規則需要遵循: 從上面的示例代碼中可以看出,一個單例類有一個靜態的屬性來保存它唯一的實例 需要將類的構造方法設置為private。這樣你不允許其他任何類來創建單例類的實例,因為它們不能訪問單例類的構造方法。