單例模式 機房合作

2021-06-19 03:05:50 字數 3005 閱讀 5795

單例模式,保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。對於單例模式的概念和作用大家可以去問度哥,這篇文章主要將的是如何使用單例模式實現窗體的唯一。

先說說我的歷程吧。

看了《大話設計模式》,感覺看懂了。然後就開始畫時序圖,主窗體在呼叫子窗體前先要經過乙個判斷類,判斷該窗體是否已經別例項化。根據自己的思路就開始了自己的畫圖之旅,可是到底能不能實現呢,感覺應該能吧。在這裡我就犯了乙個嚴重的錯誤,「應該」並不代表「能」,這種模稜兩可的回答就是一種錯誤,應該去實踐一下。帶著錯誤的思想越走越遠,可是畢竟心裡沒底,越走越覺得有問題。終於決定塔下心來看看吧,就感覺自己的想法有問題,首先它並不知道去例項化那個窗體,照我的哪種想法它應該會給方法傳進乙個引數--窗體名,可是判斷類並不能自行判斷例項化什麼窗體類。現在才發現自己的單例模式用的不對,重新回頭審視,和師姐交流後,感覺有了思路。就想重新畫圖,師姐說:「你先敲乙個demo,去實現一下。」我當時是真心不願意去敲的,敲乙個demo需要花費多長時間啊。又要建窗體又要寫方法的,感覺好麻煩啊。沒有辦法寫吧。在寫的過程中遇到了這樣那樣的問題,但最終解決了,那是一種久違的興奮。

下面就進入主題。

1先展示一下我得demo的目的。

目的:form1作為主窗體,單擊button1後顯示form2窗體,單擊button2後顯示form3窗體

2**展示

public class form1

''' ''' 單擊button1,顯示form2窗體

'''

'''

'''

'''

private sub button1_click(sender as object, e as eventargs) handles button1.click

dim form2 as form2 '定義了乙個form2型別的類

form2.getinstance().show() '呼叫form2類的方法返回窗體並顯示。

end sub

''' ''' 單擊button2,顯示form3窗體

'''

'''

'''

'''

private sub button2_click(sender as object, e as eventargs) handles button2.click

dim form3 as form3 '定義了乙個form3型別的類

form3.getinstance().show() '呼叫form3類的方法返回窗體並顯示。

end sub

end class

public class form2

private shared ftb as form2 '宣告乙個靜態的類變數

''' ''' form2的構造方法私有,外部**不能直接new來例項化它

'''

'''

private sub new()

' 此呼叫是設計器所必需的。

initializecomponent()

' 在 initializecomponent() 呼叫之後新增任何初始化。

end sub

''' ''' 得到類例項的方法,返回值就是本類物件

'''

'''

'''

public shared function getinstance() as form2

if ftb is nothing then '當ftb不存在或是已被進行關閉處理後,則例項化form2

ftb = new form2

else

if ftb.isdisposed then

ftb = new form2

end if

end if

return ftb

end function

end class

public class form3

private shared ftb as form3 '宣告乙個靜態的類變數

''' ''' form3的構造方法私有,外部**不能直接new來例項化它

'''

'''

private sub new()

' 此呼叫是設計器所必需的。

initializecomponent()

' 在 initializecomponent() 呼叫之後新增任何初始化。

end sub

''' ''' 得到類例項的方法,返回值就是本類物件

'''

'''

'''

public shared function getinstance() as form3

'當ftb不存在或是已被進行關閉處理後,則例項化form3

if ftb is nothing then

ftb = new form3

else

if ftb.isdisposed then

ftb = new form3

end if

end if

return ftb

end function

end class

上面是乙個簡單的小demo,比較簡單。從中我們不難看出呼叫窗體和被呼叫窗體之間的關係。我覺得在理解單例模式的時候,首先要理清呼叫窗體和被呼叫窗體之間的關係到底實不例項化由誰決定。被呼叫窗體對自身進行判斷,然後決定是否例項化。而呼叫窗體只要定義、呼叫、show就可以了。

通過這次小經歷得出乙個結論不要害怕去實踐,敲乙個demo才用多久啊,如果你去實踐,等走了很遠之後才發現問題,修改的工程量更大,得不償失。

機房合作之裝飾模式

用裝飾模式管實現理員登陸 b層public bool loginadmin admininfo admin if onworklist.count 0 else flag true return flag adminlogin namespace decoratormodel adminlogin ...

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

機房合作 狀態模式與上機

在機房收費系統中,有幾個業務邏輯是比較複雜的,比如說上機 下機。記得我在做第一版vb收費系統的時候,還特別地將上下機拿出來畫了乙個完整的流程圖,要不這樣做的話,最後的結果一定是懵了,也不想再繼續寫 了。在進行設計模式的學習之前,我們很有必要將上機這一業務邏輯完整的梳理一遍。一.上機業務邏輯 1.判斷...