设计模式之观察者模式(Observer Pattern)(二)

原创 2004年04月12日 12:27:00

上例子中传递的信息是一个字符串,当我们点击其中一个radio button,我们可以得到这个radio button的名称(Red Blue Green),将这个名称发送到观察者(Observer)。

Observer提供一个对目标主体(Subject)抽象连接,一个目标主体(Subject)不知道他的观察者(Observer)的任何信息,但是当他改变时可以更新通知发送到各个注册过的观察者(Observer)。

我们也可以使用委托(Delegate)来实现Observer模式<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

            '引发事件

            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

这样也可以实现相同的效果。

 

参考资料:

设计模式:利用C#Delegate来改进Observer模式 作者:卢彦
探究观察者设计模式

        刚开始学习设计模式在.NET中的应用,希望对大家在学习过程中有所帮助!

可以写信给我进行交流!

设计模式之观察者模式 (Observer Design Pattern)

一、什么是观察者模式观察者定义了一种一对多的依赖关系,当一个主题(Subject)对象状态发生变化时,所有依赖它的相关对象都会得到通知并且能够自动更新自己的状态,这些依赖的对象称之为观察者(Obser...
  • suifeng3051
  • suifeng3051
  • 2016年04月27日 19:32
  • 897

设计模式 - 观察者模式(Observer Pattern) 详解

观察者模式(Observer Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权...
  • u012515223
  • u012515223
  • 2014年05月22日 14:37
  • 2906

我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)

概述:         最近中国股市起起伏伏,当然了起伏就用商机,小明发现商机后果断想入市,买入了中国证券,他想在电脑客户端上,网页上,手机上,iPad上都可以查看到该证券的实时行情,这种情况下我们...
  • LCL_data
  • LCL_data
  • 2013年06月30日 18:19
  • 29003

Android设计模式之观察者模式(Observer Pattern)

观察者模式介绍观察者模式是一个使用率非常高的模式,它最常用的地方就是GUI系统、订阅–发布系统。因为这个模式的一个重要作用就是解耦,将观察者和被观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。...
  • happy_horse
  • happy_horse
  • 2016年05月30日 21:05
  • 1771

设计模式——观察者模式(Observer)

要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 设计模式学习笔记,欢迎交流。 ——Shulin 转载请注明出处:http://blog.csdn.net/zhsh...
  • u012909091
  • u012909091
  • 2014年08月20日 16:52
  • 2825

设计模式-深入解析观察者模式(Observer)

在上篇设计模式上我们继续前进把,苦逼(酷毙)的程序员一刻都不能松懈的,要紧跟脚步,每天都学习啊!!学了策略模式,我自己去用设计模式写了几个例子,感觉还扣以啊。下面继续总结一下观察者模式的学习,如有不正...
  • qq_29282475
  • qq_29282475
  • 2015年12月07日 16:16
  • 1241

设计模式拾荒之观察者模式( Observer Pattern ): MVC的进一步泛化

参考书籍: 《Design Patterns: Elements of Reusable Object-Oriented Software》 在商业项目中第一次读到观察者模式的代码是一个异步服务器消...
  • lengxiao1993
  • lengxiao1993
  • 2017年02月20日 14:43
  • 988

PHP设计模式之观察者模式(Observer)详细介绍和代码实例

【意图】 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新【GOF95】 又称为发布-订阅(Publish-Subscribe)模式、模型-视图...
  • longjef
  • longjef
  • 2016年11月02日 09:51
  • 3497

设计模式(行为型)之观察者模式(Observer Pattern)

观察者模式用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应...
  • yanbober
  • yanbober
  • 2015年05月04日 20:46
  • 4822

深入浅出设计模式python版——观察者模式(observer)

书中第二个设计模式——观察者模式 首先,祭出类图 然后是java内置的观察者模式类图 书中举得例子:...
  • tuantuanlin
  • tuantuanlin
  • 2016年04月24日 22:51
  • 1522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之观察者模式(Observer Pattern)(二)
举报原因:
原因补充:

(最多只允许输入30个字)