设计模式之工厂方法 FACTORY METHOD(一)‖整个面向对象编程(OOP)
,一个单一的类扮演类似交
厂模式(Simple Factory Patter
以及其他一些设计模式的始终。
通警察的角色,决定哪一个单一
| n),工厂(factory)思想贯穿于
如:生成器(Builder)模式。其间
层次上的子类将被实例化。
|
工厂方法模式(Factor
,它使得将超类的实例化延
,而是定义一个抽象类创建
| y Method pattern)是对工厂(
迟到它的每一个子类。这个模式
对象,让其子类决定创建哪一个
| factory)思想进行了巧妙的延伸
没有具体的指出延迟到哪一个子类
对蟆?br> |
下面是一个简单的例子
绩排列决赛事的分组,速度
,而且在每一个小组中成绩
straight seeding。
| ,在一个游泳比赛中如何确定游
越快所分的小组的决赛的次序越
越好、速度越快的选手也就越靠
| 泳运动员的泳道。按照运动员的成
靠后,反之,速度越慢就越先比赛
近中间的泳道。这被称为
|
当游泳运动员在锦标赛比赛过程中,
名或者16名游泳运动员将继续在决赛中继
seeded,这样使得速度最快的3名选手分
再选出速度最好的3名选手,等等。
| 他们通常要游两次。 通过在预赛中相互竞争,前12
续彼此竞争。 为了预赛工作更公平, 采用circle
别处于最迅速3个小组的中心泳道。在剩下的选手中
|
| Protected numLanes As Integer |
| Protected swmmers As Swimmers |
Public Sub New(ByVal Filenam
| e As String, ByVal lanes As Integer)
|
fl = New vbF
| ile(Filename) '打开一
| 个文本文件
|
| numLanes = lanes '保存泳道数量信息 |
| sw = New Swimmer(s) '建立对象 |
| swmmers.Add(sw) 'add to list |
Public Function getSwimmers(
| ) As ArrayList
|
ublic Overridab
| le Function isPrelim() As Bo
| olean
|
Public Overridab
| le Function isFinal() As Boo
| lean
|
Public Overridab
| le Function isTimedFinal() A
| s Boolean
|
Public Overridable Function
| getSeeding() As Seeding
|
因为所有的派生类都要从文本文件读
义的方法均为虚方法,可以通过继承Even
TimedFinalEvent类),这两个类之间唯
一个包含以下方法的抽象选拔类:
| 取数据,所以,我们把Events类作为基类。其中所定
ts类来实现具体的类(PrelimEvent类、
一的不同就是返回的选拔的类别不同。我们也定义了
|
| Public MustInherit Class Seeding |
| Protected numLanes As Integer |
| Protected laneOrder As ArrayList |
| Protected numHeats As Integer |
Public Function
| getSeeding() As Swimmers
|
| Public Function getHeat() As Integer |
| Public Function getCount() As Integer |
| Public MustOverride Sub seed() |
Public Function
| getSwimmers() As ArrayList
|
| Public Function getHeats() As Integer |
Public Function odd(ByVal n
| As Integer) As Boolean
|
Public Function
| calcLaneOrder(ByVal lns As I
| nteger) As ArrayList
|
| Dim lanes(numLanes) As Integer |
| Dim mid, incr, ln As Integer |
| For i = 0 To numLanes - 1 |
| laneOrder = New ArrayList |
| For i = 0 To numLanes - 1 |
| calcLaneOrder = laneOrder |
Public Sub New(B
| yVal swmrs As Swimmers, ByVa
| l lanes As Integer)
|
Public Function sort(ByVal s
| w As Swimmers) As Swimmers
|
asw(
| i) = CType(sw.Item(i), Swimm
| er)
|
| If asw(i).getTime > asw(j).getTime Then |
Console.WriteLine("C
+ max.ToString + " " + e.ToString())
| aught " + i.ToString + " " + j.ToString + " "
|
| Console.WriteLine(e.StackTrace) |
上一页> 下一页>