很久沒介紹Design Pattern,所以再找一個國內比較少人用的Pattern:MonoState
平時若希望只有唯一物件時,最常想到的就是Singleton,但是Singletone通常都有一個getInstance的method,用起來和一般物件不同。而MonoState的運作方式與一般物件相同,所以可以寫給菜鳥PG使用,他們也不會知道這是靜態的值。
說了優點,當然也要說缺點,主要是物件會有建構與解構的動作,效率一定比Singleton差一些。
用 途:與Singleton相同,不限制用getInstance存取時。我所想到的一個用途是在寫Multithread程式時,鎖定的機制用。Java 的synchronized或C#的lock都必須對一個物件instance鎖定,因此若需要某個固定物件時,用MonoState作為Mutex就很 好用。
範例:
Java:
C#:
參考資料:
http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=147&rl=1
http://codebetter.com/blogs/darrell.norton/archive/2004/02/05/6644.aspx
http://www.devx.com/getHelpOn/10MinuteSolution/16361/1954?pf=true
平時若希望只有唯一物件時,最常想到的就是Singleton,但是Singletone通常都有一個getInstance的method,用起來和一般物件不同。而MonoState的運作方式與一般物件相同,所以可以寫給菜鳥PG使用,他們也不會知道這是靜態的值。
說了優點,當然也要說缺點,主要是物件會有建構與解構的動作,效率一定比Singleton差一些。
用 途:與Singleton相同,不限制用getInstance存取時。我所想到的一個用途是在寫Multithread程式時,鎖定的機制用。Java 的synchronized或C#的lock都必須對一個物件instance鎖定,因此若需要某個固定物件時,用MonoState作為Mutex就很 好用。
範例:
Java:
public class MonoState
{
private static String mutex="mutex";
public MonoState(){};
public String getMutex()
{
return mutex;
}
public void setMutex(String mutex)
{
this.mutex = mutex;
}
}
C#:
public class MonoState
{
private static string mutex="mutex";
public MonoState(){};
public string Mutex
{
get { return mutex; }
set { mutex = value; }
}
}
參考資料:
http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=147&rl=1
http://codebetter.com/blogs/darrell.norton/archive/2004/02/05/6644.aspx
http://www.devx.com/getHelpOn/10MinuteSolution/16361/1954?pf=true
留言