您现在的位置: 中国IT实验室 >> 软件水平考试 >> 特别推荐 >> 文章正文
设计模式之工厂方法 FACTORY METHOD(三)

CSDN.NET  2004-8-11  保存本文  推荐给好友  QQ上看本站  收藏本站



  Straight Seeding类
  在这个小程序在实际应用当中,会发现大部分工作在Straight Seeding类中完成的。我们实例化StraightSeeding 类,复制、修改游泳运动员的集合和所属泳道位置。
  
  Public Class StraightSeeding
  
    Inherits Seeding
  
    Public Overrides Sub seed()
  
      Dim lastHeat As Integer
  
      Dim lastlanes As Integer
  
      Dim i, j, count, heats As Integer
  
      Dim swmr As Swimmer
  
      Try
  
        sw = sort(sw)
  
        laneOrder = calcLaneOrder(numLanes)
  
        count = sw.Count
  
        lastHeat = count Mod numLanes
  
        If (lastHeat < 3) And lastHeat > 0 Then
  
          lastHeat = 3  'last heat must have 3 or more
  
        End If
  
        count = sw.Count
  
        lastlanes = count - lastHeat
  
        numheats = lastlanes \ numLanes
  
        If (lastHeat > 0) Then
  
          numheats = numheats + 1
  
        End If
  
        heats = numheats
  
        'place heat and lane in each swimmer's object
  
        j = 0
  
        For i = 0 To lastlanes - 1
  
          swmr = sw.swm(i)
  
          swmr.setLane(CType(laneOrder(j), Integer))
  
          j = j + 1
  
          swmr.setHeat(heats)
  
          If (j >= numLanes) Then
  
            heats = heats - 1
  
            j = 0
  
          End If
  
        Next i
  
        'Add in last partial heat
  
        If (lastHeat > 0) Then
  
          If j > 0 Then
  
            heats = heats - 1
  
          End If
  
          j = 0
  
          For i = lastlanes To count - 1
  
            swmr = CType(sw(i), Swimmer)
  
            swmr.setLane(CType(laneOrder(j), Integer))
  
            j = j + 1
  
            swmr.setHeat(heats)
  
          Next i
  
        End If
  
  
  
      Catch e As Exception
  
        Console.WriteLine(i.ToString + j.ToString + e.ToString)
  
        Console.WriteLine(e.StackTrace)
  
      End Try
  
    End Sub
  
    '-----
  
    Public Sub New(ByVal swmrs As Swimmers, ByVal lanes As Integer)
  
      MyBase.new(swmrs, lanes)
  
    End Sub
  
  End Class
  
  当调用getSwimmers方法时,StraightSeeding 类将创建被选拔的游泳运动员数组。
  
  Circle Seeding类
  CircleSeeding 类是从StraightSeeding 类派生的。
  
  Public Class CircleSeeding
  
    Inherits StraightSeeding
  
    Private circlesd As Integer
  
    '-----
  
    Public Sub New(ByVal swmrs As Swimmers, ByVal lanes As Integer)
  
      MyBase.New(swmrs, lanes)
  
    End Sub
  
    '-----
  
    Public Overrides Sub seed()
  
      Dim i, j, k, numHeats As Integer
  
      laneOrder = calcLaneOrder(numLanes)
  
      sw = sort(sw)  '排序
  
      MyBase.seed()     
  
      numheats = MyBase.getHeats
  
        If (numheats >= 2) Then
  
        If (numheats >= 3) Then
  
          circlesd = 3       
  
   Else
  
          circlesd = 2       
  
        End If
  
        i = 0
  
        
  
        For j = 0 To numLanes - 1
  
          For k = 1 To circlesd
  
            sw.swm(i).setLane(CType(laneOrder(j), Integer))
  
            sw.swm(i).setHeat(numheats - k + 1)
  
            i = i + 1
  
          Next k
  
        Next j
  
      End If
  
    End Sub
  
    '-----
  
  End Class
  
  运行
  在这个例子当中,我们使用完成500m自由泳和100m自由泳的运动员列表来创建TimedFinalEvent 类和PrelimEvent类。




 相关文章  热门文章
C#中DataGrid的数据新增编辑删除操作代码
如何使用 ADO.NET 轻松操纵数据库
C#.Net 网络程序开发基础之Socket篇
C#.Net 网络程序开发基础之TCP篇
运用 .net 中的 socket 实现文件传输
如何判断程序处于运行环境还是调试环境
从一个程序出发详细研究 DataReader
.NET 应用程序如何披上XP的外衣?
使用 C# 在应用程序之间发送消息
设计模式之工厂方法 FACTORY METHOD(二)

 文章评论


认证培训
热门专题       more
相关下载
论坛新帖
博 客