设计模式之工厂方法(FACTORY METHOD))(三)

类别:.NET开发 点击:0 评论:0 推荐:

 

接上页

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类。


 

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

可以写信给我进行交流!

本文地址:http://com.8s8s.com/it/it44884.htm