国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

設(shè)計模式之觀察者模式(Observer Pattern)(二)

2024-07-21 02:16:29
字體:
供稿:網(wǎng)友
在上例子中傳遞的信息是一個字符串,當(dāng)我們點擊其中一個radio button,我們可以得到這個radio button的名稱(red blue green),將這個名稱發(fā)送到觀察者(observer)。

observer提供一個對目標主體(subject)抽象連接,一個目標主體(subject)不知道他的觀察者(observer)的任何信息,但是當(dāng)他改變時可以更新通知發(fā)送到各個注冊過的觀察者(observer)。

我們也可以使用委托(delegate)來實現(xiàn)observer模式

public class subject

'定義委托

public delegate sub sendmessagedelegate(byval aprice as string)

'定義事件

public event sendmessage as sendmessagedelegate

dim _askprice as string



public writeonly property message() as string

set(byval value as string)

_askprice = value

'引發(fā)事件

raiseevent sendmessage(_askprice)

end set

end property

end class

在主窗體中:

dim lscol as new listobs

dim frcol as new frmd

public sub new()

mybase.new()

form1 = me

initializecomponent()

dim evh as eventhandler = new eventhandler(addressof radiohandler)

addhandler opred.click, evh

addhandler opblue.click, evh

addhandler opgreen.click, evh

lscol.show() ‘顯示兩個observer

frcol.show()

end sub

‘處理radio button的單擊事件

protected sub radiohandler(byval sender as object, byval e as eventargs)

dim i as integer

dim rbut as windows.forms.radiobutton = ctype(sender, windows.forms.radiobutton)

dim subject as new subject

dim adelegate as subject.sendmessagedelegate = new subject.sendmessagedelegate(addressof lscol.add)

dim adelegate1 as subject.sendmessagedelegate = new subject.sendmessagedelegate(addressof frcol.drawmessage)

‘布線

addhandler subject.sendmessage, adelegate

addhandler subject.sendmessage, adelegate1

'addhandler subject.sendmessage, addressof lscol.add

'addhandler subject.sendmessage, addressof frcol.drawmessage

subject.message = rbut.text

‘撤銷布線

removehandler subject.sendmessage, adelegate

removehandler subject.sendmessage, adelegate1

end sub

在listbox窗體和colorframe窗體分別定義委托所指向的事件:

‘listbox窗體

public sub add(byval mesg as system.string)

lscolors.items.add(mesg)

end sub

‘colorframe窗體

public sub drawmessage(byval mesg as system.string)

colname = mesg

select case mesg.tolower

case "red"

pic.backcolor = color.red '

case "blue"

pic.backcolor = color.blue

case "green"

pic.backcolor = color.green

end select

end sub

這樣也可以實現(xiàn)相同的效果。



參考資料:

設(shè)計模式:利用c#的delegate來改進observer模式 作者:盧彥
探究觀察者設(shè)計模式

剛開始學(xué)習(xí)設(shè)計模式在.net中的應(yīng)用,希望對大家在學(xué)習(xí)過程中有所幫助!

可以寫信給我進行交流!
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高尔夫| 肇庆市| 育儿| 马关县| 南木林县| 达日县| 汉川市| 如东县| 无为县| 思茅市| 凤庆县| 马山县| 凯里市| 长宁县| 宿州市| 达尔| 蒙阴县| 海丰县| 肇州县| 白山市| 田林县| 阿拉善右旗| 肇源县| 呼玛县| 青海省| 康定县| 玉龙| 区。| 白朗县| 灵台县| 榆树市| 洪洞县| 张掖市| 恩平市| 常州市| 泽普县| 龙口市| 裕民县| 任丘市| 绥芬河市| 吉安市|