转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
VB.Net中文教程(11) Prototype样式         ★★★★

VB.Net中文教程(11) Prototype样式

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1960 更新时间:2009/4/23 19:01:10
r, ByVal y As Integer) Implements IShape.SetXY
        MyBase.SetXY(x, y)
    End Sub
End Class

Class Rectangle
    Inherits Shape
    Implements IShape
   
    Public Sub Draw() Implements IShape.Draw
        MessageBox.Show("Drawing a Rectangle at (" + str(lx) + ", " + str(ly) + ")")
    End Sub
    Public Function Clone() As IShape Implements IShape.Clone
        Clone = New Rectangle()
    End Function
    Public Sub SetValue(ByVal x As Integer, ByVal y As Integer) Implements IShape.SetXY
        MyBase.SetXY(x, y)
    End Sub
End Class
''''------------------------------------------------------------------------------------------
Class ShapeList
    Private tlist(10) As IShape
    Private counter As Integer
   
    Public Sub New()
        counter = 0
    End Sub
    Public Sub AddShape(ByVal sobj As IShape)
        tlist(counter) = sobj
        counter = counter + 1
    End Sub
    Public Function GetShape(ByVal i As Integer) As IShape
        GetShape = tlist(i)
    End Function
    Public Sub Draw()
        Dim i As Integer
        For i = 0 To counter - 1
            tlist(i).Draw()
        Next
    End Sub
End Class
''''------------------------------------------------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
     ......
#End Region
    Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim list As New ShapeList()
        Dim pShape As IShape
        pShape = New Circle()
        pShape.SetXY(10, 10)
        list.AddShape(pShape)
       
        pShape = New Rectangle()
        pShape.SetXY(50, 50)
        list.AddShape(pShape)
       
        pShape = list.GetShape(0).Clone()
        pShape.SetXY(230, 70)
        list.AddShape(pShape)
       
        list.Draw()
    End Sub
End Class

此程序输出:
               Draw a Circle at (10, 10)
               Draw a Rectangle at (50, 50)
               Draw a Circle at (230, 70)

Shape类别专心担任幕后角色了,Client及ShapeList类别的设计者只看到IShape接口而已,这充分发挥了VB接口的优点。


4. Prototype样式之应用
   ----- 组件之设计与组装

    软件工业逐渐往零组件或称组件(component) 方向发展﹐未来计算机软件人员将分为两大群﹕对象设计者(object designer) 与对象装配者(object assembler)。就拿VB 程序员来说﹐对象设计者负责设计类别﹐以便诞生出各式各样之对象﹔对象装配者能使用现有对象或将之组装成更大之对象或系统。
    依据上述加菲猫和西施的例子中﹐人们常很自然地拿自己熟悉的例子来描述他所想要的对象﹔亦即经由举例来说明他心中的对象﹐是较合乎人们生活习惯的。反而较少以类别来描述他心中之对象。因之﹐对象设计者定义好各类别之后也应各诞生一个对象﹐当做例子(prototype) ﹐最好显示在Windows 画面上。对象装配者不需要具有「类别」观念﹐只需用鼠标点取画面上的prototype 对象﹐就能获得一个类似的新对象了。如此﹐就可构成美好的分工情形。然而﹐在VB及Java等语言中﹐对象皆是由「类别」来产生的。这会造成冲突问题﹕

u   设计者不能随时诞生对象供装配者使用﹐因而希望装配者随时藉由类别诞生对象。
u   装配者最好不必具有类别观念﹐因而不愿意藉由类别来诞生对象。

如何化解这个问题呢﹖答案是﹕使用prototype 样式。

对象设计者之工作包括:
 1. 设计(定义)一个Form类别叫Form1。
 2. 设计一个应用架构(application framework)做为「设计者」与「装配者」分工的基础。
 3. 基于架构,衍生出子类别,如Circle及Rect。
 4. 诞生对象,存入串行ShapList中,如图3所示。

       
              图3、组装的基础环境

对象装配者之工作是:
    点取(或使讯息)给串行中的prototype对象,由其呼叫Clone( )来诞生新对象。
例如,让「装配者」自屏幕画面上选取对象。Circle和Rectangle各定义Draw( )及Clone( )达到多型效果,让「装配者」使用起来更加方便。Clone( )必传回一个新对象。Form1.Click()里的指令-----

        pShape = list.GetShape(0).Clone()
        pShape.SetXY(230, 70)
        list.AddShape(pShape)

    首先,取出串行中的第0个prototype对象,此对象诞生另一个对象,由pShape代表之。在将此新对象存入串行中,如下图所示:
       


       
    图4、组装者依据prototype指示计算机诞生对象

最末将各prototype对象数示于画面上。
   上述例子中,把ShapeList也归为对象设计者的掌管工作之一。在实际上,ShapeList常隶属于「装配工具」(assembly tools)内的一部份。而装配工具的设计者,可能既非对象设计者,也非对象装配者,而是用来协助「装配者」使其工作效率更佳。
    由于Clone函数及Draw( )程序的多型性,在加上Clone( )能产生新对象,使得装配工具设计者,不必顾虑到对象类别之剧增,也不必用到期类别名称,大大减少工具程序之复杂度,这也是prototype模式的另一个重要用途。■

 

上一页  [1] [2] 


[网页制作]用 prototype 定义自己的方法  [Web开发](Javascript)prototype的一个优势也是缺点
[Web开发]JavaScript中的prototype(原型)属性研究  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台