使用Publish/Subscribe 设计模式达到对象间数据同步(二)
2004-04-18 23:57
731 查看
在注册处理期间,subscriber被分配一个独特的标记,用来在eventchannel中标识subscriber。eventchannel也使用这个标记索引那些subscriber。虽然样品应用作为标记目标的杂乱脉冲干扰电码使用,我推荐在你的自己的程序里使用另一个方法产生一个独特的标识符(例如产生一GUID)。<?xml:namespaceprefix=ons="urn:schemas-microsoft-com:office:office"/>
使用目录菜单建立3到4个frmList窗口实例。使用新的目录菜单选项创作frmList的3或者4个实例,然后在其中一个窗口中选择一个条目,双击这个条目进入可编辑模式,键入一个新的名字。窗体建立一个描述数据更新的事件并通过eventchannel发送。
发送事件的窗体证实它是事件的创始人;并将clsDataEvent类的Origin属性设置为它自己。这样可以阻挡其他多余的事件,以确保发送者接收到的事件都是已经发布过的。最后,事件的发布者注意到了数据的改变。
所有的subscribers将收到事件。在EventApp中,每个frmList的实例将收到事件并且改变每个ListView中的发生变化的项目:
使用目录菜单建立3到4个frmList窗口实例。使用新的目录菜单选项创作frmList的3或者4个实例,然后在其中一个窗口中选择一个条目,双击这个条目进入可编辑模式,键入一个新的名字。窗体建立一个描述数据更新的事件并通过eventchannel发送。
PrivateSub
lvwList_AfterLabelEdit(
ByVal
sender
As
_Object,
ByVal
eAs_
System
.Windows.Forms.LabelEditEventArgs)_
Handles
lvwList.AfterLabelEdit
DimobjEvent
As
clsDataEvent
If
e.Label<>""
Then
objEvent=
New
clsDataEvent()
With
objEvent
.Name="NameChanged"
.Value=e.Label
.ExtraData=lvwList.Items(e.Item).Tag
.Origin=
Me
EndWith
MyBase
.EventChannel.PublishEvent(objEvent)
EndIf
EndSub
发送事件的窗体证实它是事件的创始人;并将clsDataEvent类的Origin属性设置为它自己。这样可以阻挡其他多余的事件,以确保发送者接收到的事件都是已经发布过的。最后,事件的发布者注意到了数据的改变。
所有的subscribers将收到事件。在EventApp中,每个frmList的实例将收到事件并且改变每个ListView中的发生变化的项目:
PublicOverridesSub
EventRaise(_
ByVal
NewEvent
As
_
EventApp.clsEvent)
Dim
objListItem
As
ListViewItem
SelectCase
NewEvent.Name
Case
"NameChanged"
ForEach
objListItem
In
lvwList.Items
If
objListItem.Tag=NewEvent.ExtraData
Then
objListItem.Text=NewEvent.Value
EndIf
Next
CaseElse
'Handleotherevents
EndSelect
EndSub
这种事件系统类型将给你带来很大的灵活性。你可以使在应用程序中的任何一个[/code]
对象发布事件,只有那些对此感兴趣的对象的到更新的信息。也可以改变Event
Channel类的实现方式,如可以通过使用Webservice或者消息系统(如MS
MessageQueueIBMMQ系列),通过HTTP协发送事件。
相关文章推荐
- 使用Publish/Subscribe 设计模式达到对象间数据同步
- 使用Publish/Subscribe 设计模式达到对象间数据同步
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(2)
- GoF著作中未提到的设计模式(7):Publish-Subscribe
- 设计模式---订阅发布模式(Subscribe/Publish)
- 架构设计之源:设计模式的场景分析(1)Publish-Subscribe
- 设计模式----优先使用对象组合,而非类继承
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(3)
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- PHP设计模式之适配器模式,建造者模式,数据访问对象模式
- 2013年8月20日、关键字this|操作数组(对数组工具对象建立,静态中使用,文档注释)|单例设计模式
- 《C# 设计模式》笔记: 第4章 在C#中使用类和对象
- PHP设计模式--数据访问对象模式
- GoF著作中未提到的设计模式(7):Publish-Subscribe
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(2)
- GoF著作中未提到的设计模式之七:Publish-Subscribe
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(1)
- [转载] C#异步编程模型1--使用 IAsyncResult 对象的异步设计模式
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(3)
- 设计模式--观察者模式(Publish/Subscribe Mode)