在Visual Basic中实现观察者模式
在VisualBasic中实现观察者模式
文章编号:1003—5850(2007)02—0038—03
在VisualBasic中实现观察者模式
ObserverPatterninVisualBasic
刘楠
(军事经济学院研究生二队武汉430035)
【摘要】设计模式在面向对象软件设计中应用广泛,遵循一定的编程模式才能使自己的代码便于理解,易于交
流.介绍了一种常见的设计模式一一观察者模式,分析了在VisualBasic中实现观察者模式的可行性.Observer
(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,文中通过样例提供了该模式的一个
基本实
现方法.
【关键词】观察者模式,设计模式,VB
中围分类号:TP312文献标识码:A ABSTRACTDesignpatternisusedextensivelyinob)eet--orientedsoftwaredesign.Followi ngacertaindesignmode.itiseasytO understandthecodeandeasytocommunicate.Thispaperpresentsakindofcommondesignpa ttern————Observerpattern.and analysistheimplementationofObserverpatterninVisualBasic.Observerpatternisacommo nlyusedpattern,especiallyusedin
interfacedesign.Finally,anessentialimplementationmethodofObserverpatternisprovided inasampleapplication.
KEYWORDSObserverpattern,designpatterns,visualbasic(VB)
1什么是观察者(Observer)模式
观察者(Observer)模式是一种软件开发中比较常
用的模式[,它定义了一个一多的依赖关系,让一个
或多个观察者观察一个主题.当主题的状态发生改变时,所有的观察者都将得到通知并自动更新.
观察者模式的优点是实现了表示层和数据逻辑层
的分离,并定义了稳定的更新消息传递机制,类别清晰,并抽象了更新接口,使得可以有各种各样不同的表示层(观察者).使用观察者模式在被观察者和观察者之间建立一个抽象的耦合.被观察者角所知道的只是一个具体观察者聚集,每一个具体观察者都符合一个抽象观察者的接口.被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口.由于被观察者和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次.
另外,观察者模式支持广播通信.被观察者会向所
有的登记过的观察者发出通知.当观察者不再对该被观察者感兴趣,只需要发出注销通知,取消自己在观察者上的注册即可.观察者模式结构图如图1所示.
图1观察者模式结构图
在观察者模式里有如下的角:
①抽象被观察者角(Subject).抽象被观察者角
把所有的观察者对象的引用保存在一个列表里.每个角都可有任何数量的观察者.角提供一个接口, 可添加或撤销观察者对象.
②抽象观察者角(Observer).为所有的具体观
察者定义一个接口,在得到通知时更新自己.
⑧具体被观察者角(Concretesubject).保存对
具体观察者对象有用的内部状态;在内部状态改变时给观察者发出一个通知.
④具体观察者角(ConcreteObserver).保存一
个指向具体被观察者对象的引用;和一个与具体被观
察者对象的状态相符的状态.具体观察者角实现抽
象观察者角所要求的更新自己的接I:I,以便使本身
的状态与具体被观察者对象的状态相符.
从图1可以看出,Observer模式中有3种典型的
操作,即注册,通知和注销.
观察者首先调用被观察者的注册方法,以便在被
观察者中进行登记.当被观察者的状态发生变化时,
被观察者向所有注册的观察者发送消息,通知数据的
改变.如果观察者不再需要观察某一被观察者,就执行
此被观察者的注销操作,从而解除了对此被观察者的
观察.
2VisualBasic中的面向对象
采用观察者模式可以解决代码问高耦合的问题,
但我们在开发中所使用的平台是VisualBasic6.0,在VisualBasic中并未预置观察者类来实现观察者模式,
VB6作为一种快速应用程序开发(RAD)工具,上手简
*2006—10—25收到,2007一O1—17改回
**刘楠,男,1983年生,硕士研究生,研究方向:军需勤务与自动化
第2O卷第2期电脑开发与应用
单,但它并不能算是一个真正的面向对象的工具,只能
说是基于对象的.
《设计模式》一书中归纳的23种设计模式都是面
向对象领域的大师们在多年的设计和开发实践中归纳
出来的,可以说是面向对象的精髓.作为一个RAD工
具的VisualBasic6.0,能否实现面向对象,从而实现
观察者模式呢?
所谓面向对象,一般要有3个基础概念:封装,继
承,多态.
①封装.把数据以及操作数据的相关方法组合在
同一个单元中,通过封装,把类(class)作为软件中的
基本复用单元,提高其内聚度,降低其耦合度.在VB
中可以通过建立类模块,将一个类保存在一个类模块中,从而实现了封装.
②继承.是对现实世界中遗传现象的模拟,使用已
存在的定义作为基础建立新定义的技术.新类的定义可以是既有类所声明的数据和新类所增加的声明的组合.
⑧多态."多态性"意味着可以有多个可互换使用
的类,即使每个类以不同方式实现相同属性或方法.多态性是面向对象编程的精华,因为它允许使用同名的项,而不管此时在使用什么类型的对象.简单说就是同一
个函数名可以对应不同的函数实体,以满足不同需
要的特性.visual basic pdf
至于多态和继承,大多数面向对象的程序设计系
统,都是通过继承来提供多态的.VisualBasic不用继
承来提供多态.VisualBasic是通过多重ActiveX接
口来提供多态的.在构成ActiveX规格说明基础的部件设计模型(cOM)中,多重接口允许软件部件系统
在不扩散现有代码的情况下进行展开.
个接口是一组相关的属性和方法.ActiveX规
格说明的许多内容是关于实现一些标准接口的,这些标准接口是用来获得系统服务或者为其他程序提供功能.
3VisualBasic中观察者模式的实现方法
由于有可以使用的接口和将各显示组件封装为
类,因此在VisualBasic中就要可能实现观察者模式. 具体实现方法包括:
3.1采用虚函数作为接口
采用虚函数作为接口时,首先建立一个不包含实
现的任何代码的抽象类,抽象类不是用来创建对象的, 其用途是为添加其他类中的接口提供模板.其内容将被引用该接口的具体类的函数中重写,通过重写不同的代码来实现不同的功能.
如在抽象的观察者类ClsObserver中建立一个
虚函数update(),用于更新观察者状况.该函数体内
不需要填写代码.
PublicSubupdate()
EndSub
在具体的观察者类中需引用ClsObserver类的
虚函数作为接口.如在显示图表的一个具体观察者类ClsChildChart中,首先用Implements关键字来
引用该抽象类.
ImplementsCls—
Observer
再重写抽象类中的虚函数,在虚函数前用"一"字符
来连接抽象类名和虚函数名,并为其添加具体实现代码,从而使其成为具体的函数.
SubCLS—
Observer—
update()
Dimaaa(1)AsString
aaa(0)=—
in

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。