1.公司类抽象类或接口
Public MustInherit Class Company
Protected name As String
Public Sub New(ByVal myName As String)
Me.name = myName
End Sub
Public MustOverride Sub add(ByVal c As Company)
Public MustOverride Sub Remove(ByVal c As Company)
Public MustOverride Sub Display(ByVal depth As Integer)
Public MustOverride Sub LineOfDuty()
End Class
2.具体公司类实现接口树枝节点
Public Class ConcreteCompany
Inherits Company
Private _children As New List(Of Company)
Public Property children As List(Of Company)
Get
Return _children
End Get
Set(ByVal value As List(Of Company))
_children = value
End Set
End Property
Public Sub New(ByVal myName As String)
MyBase.new(myName)
End Sub
Public Overrides Sub add(ByVal c As Company)
children.Add(c)
End Sub
Public Overrides Sub Display(ByVal depth As Integer)
Console.WriteLine(New String("-", depth) + name)
For Each com In children
com.Display(depth + 4)
Next
End Sub
Public Overrides Sub LineOfDuty()
For Each com In children
com.LineOfDuty()
Next
End Sub
Public Overrides Sub Remove(ByVal c As Company)
children.Remove(c)
End Sub
End Class
3.人力资源部与财务部类树叶节点
'人力
Public Class HRDepartment
Inherits Company
Public Sub New(ByVal myName As String)
MyBase.New(myName)
End Sub
Public Overrides Sub add(ByVal c As Company)
End Sub
Public Overrides Sub Display(ByVal depth As Integer)
Console.WriteLine(New String("-", depth) & name)
End Sub
Public Overrides Sub LineOfDuty()
Console.WriteLine("{0}员工招聘培训管理", name)
End Sub
Public Overrides Sub Remove(ByVal c As Company)
End Sub
End Class
'财务
Public Class FinanceDepartment
Inherits Company
Public Sub New(ByVal myName As String)
MyBase.New(myName)
End Sub
Public Overrides Sub add(ByVal c As Company)
End Sub
Public Overrides Sub Display(ByVal depth As Integer)
Console.WriteLine(New String("-", depth) & name)
End Sub
Public Overrides Sub LineOfDuty()
Console.WriteLine("{0}公司财务收支管理", name)
End Sub
Public Overrides Sub Remove(ByVal c As Company)
End Sub
End Class
4.客户端调用
Module Module1
Sub Main()
Dim root As New ConcreteCompany("北京总公司")
root.add(New HRDepartment("总公司人力资源部"))
root.add(New FinanceDepartment("总公司账务部"))
Dim comp As New ConcreteCompany("上海华东分公司")
comp.add(New HRDepartment("华东分公司人力资源部"))
comp.add(New FinanceDepartment("华东分公司账务部"))
root.add(comp)
Dim comp1 As New ConcreteCompany("南京办事处")
comp1.add(New HRDepartment("南京办事处人力资源部"))
comp1.add(New FinanceDepartment("南京办事处账务部"))
root.add(comp1)
Dim comp2 As New ConcreteCompany("杭州办事处")
comp2.add(New HRDepartment("杭州办事处人力资源部"))
comp2.add(New FinanceDepartment("杭州办事处账务部"))
root.add(comp2)
Console.WriteLine("结构图")
root.Display(1)
Console.WriteLine("职责")
root.LineOfDuty()
Console.Read()
End Sub
End Module