日志文章

2007年08月06日 15:08:35

抽象工厂

Public MustInherit Class AbstractFactory
Public MustOverride Function CreateProductA()
Public MustOverride Function CreateProductB()
End Class

'抽象产品A
Public MustInherit Class AbstractProductA
Public MustOverride Sub ShowInfo()
End Class

'抽象产品B
Public MustInherit Class AbstractProductB

Public MustOverride Sub ShowInfo()
Public MustOverride Sub Interact()
End Class

'实际工厂1,负责生产第一类别的产品
Public Class Factory1
Inherits AbstractFactory

Public Overrides Function CreateProductA()
  Return New ProductA1()
End Function

Public Overrides Function CreateProductB()
  Return New ProductB1()
End Function
End Class

'实际工厂2,负责生产第二类别的产品
Public Class Factory2
Inherits AbstractFactory

Public Overrides Function CreateProductA()
  Return New ProductA2()
End Function

Public Overrides Function CreateProductB()
  Return New ProductB2()
End Function
End Class

'第一类别中的实际产品A
Public Class ProductA1
Inherits AbstractProductA

Public Overrides Sub ShowInfo()
  Console.WriteLine("ProductA1 is running.")
End Sub

End Class
'第一类别中的实际产品A
Public Class ProductB1
Inherits AbstractProductB

Public Overrides Sub ShowInfo()
  Console.WriteLine("ProductB1 is running.")
End Sub

Public Overrides Sub Interact(ByVal a As AbstractProductA)
  Console.WriteLine(Me.ToString & " interact with " & a.ToString)
End Sub
End Class

'第二类别中的实际产品A
Public Class ProductA2
Inherits AbstractProductA

Public Overrides Sub ShowInfo()
  Console.WriteLine("ProductA2 is running.")
End Sub
End Class

'第二类别中的实际产品B
Public Class ProductB2
Inherits AbstractProductB

Public Overrides Sub ShowInfo()
  Console.WriteLine("ProductB2 is running.")
End Sub

Public Overrides Sub Interact(ByVal a As AbstractProductA)
  Console.WriteLine(Me.ToString & " interact with " & a.ToString)
End Sub
End Class

'产品A和产品B总是在一起使用
Public Class Environment
Private productA As AbstractProductA
Private productB As AbstractProductB

Public Sub New(ByVal factory As AbstractFactory)
  productA = factory.CreateProductA()
  productB = factory.CreateProductB()
End Sub

Public Sub Run()
  productA.ShowInfo()
  productB.ShowInfo()
  productB.Interact(productA)
End Sub
End Class

Public Module Client
Sub Main()
  'Get Environment1.
  Dim factory1 As AbstractFactory = New Factory1
  Dim e1 As Environment = New Environment(factory1)
  e1.Run()

  'Get Enviroment2.
  Dim factory2 As AbstractFactory = New Factory2
  Dim e2 As Environment = New Environment(factory2)
  e2.Run()

  'Waite User.
  Console.Read()
End Sub

End Module

Tags: abstract   factory  

类别: desinner pattern |  评论(0) |  浏览(2142) |  收藏
发表评论
看不清楚,换一张