# 設計模式之Factory 方法（FACTORY METHOD））（三）

Straight Seeding類

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

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

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

## E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

## Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

## Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth \$300-1200 USD