1.管理者抽象类
'管理者抽象类,即Handler
Public MustInherit Class Manager
'管理者
Protected name As String
'管理者上级
Protected superior As Manager
Public Sub New(ByVal n As String)
Me.name = n
End Sub
Public Sub SetSuperior(ByVal sup As Manager)
Me.superior = sup
End Sub
Public MustOverride Sub RequestApplication(ByVal req As request)
End Class
2.“经理类就可以去继承这个=‘管理者’类,只需重写‘申请请求’的方法就可以了。
'经理
Public Class CommonManager
Inherits Manager
Public Sub New(ByVal n As String)
MyBase.New(n)
End Sub
Public Overrides Sub RequestApplication(ByVal req As Request)
'经理权限是批2天内的假期
If req.requestType = "请假" And req.Number <= 2 Then
Console.WriteLine("{0}:{1} 数量{2}被批准", name, req.RequestContent, req.Number)
Else
If superior IsNot Nothing Then
superior.RequestApplication(req)
End If
End If
End Sub
End Class
3.¨总监’类同样继承‘管理者类’。”
'总监
Public Class Majordomo
Inherits Manager
Public Sub New(ByVal n As String)
MyBase.New(n)
End Sub
Public Overrides Sub RequestApplication(ByVal req As Request)
If req.requestType = "请假" And req.Number <= 5 Then
Console.WriteLine("{0}:{1} 数量 {2} 被批准", name, req.RequestContent, req.Number)
Else
If superior IsNot Nothing Then
superior.RequestApplication(req)
End If
End If
End Sub
End Class
4.引总经理’的权限就是全部都需要处理。”
'总经理
Public Class GeneralManager
Inherits Manager
Public Sub New(ByVal n As String)
MyBase.New(n)
End Sub
Public Overrides Sub RequestApplication(ByVal req As Request)
If req.requestType = "请假" Then
Console.WriteLine("{0}:{1} 数量 {2} 被批准", name, req.RequestContent, req.Number)
Else
If req.requestType = "加薪" And req.Number <= 500 Then
Console.WriteLine("{0}:{1} 数量 {2} 被批准", name, req.RequestContent, req.Number)
ElseIf req.requestType = "加薪" And req.Number > 500 Then
Console.WriteLine("{0}:{1} 数量 {2} 再说吧", name, req.RequestContent, req.Number)
End If
End If
End Sub
End Class
5.Request类
Public Class Request
Private _requestType As String
Public Property requestType As String
Get
Return _requestType
End Get
Set(ByVal value As String)
_requestType = value
End Set
End Property
Private _requestContent As String
Public Property RequestContent As String
Get
Return _requestContent
End Get
Set(ByVal value As String)
_requestContent = value
End Set
End Property
Private _number As Integer
Public Property Number As Integer
Get
Return _number
End Get
Set(ByVal value As Integer)
_number = value
End Set
End Property
End Class
6.客户端
Module Module1
Sub Main()
Dim jingli As CommonManager = New CommonManager("金利")
Dim zongjian As Majordomo = New Majordomo("宗剑")
Dim zhongjingli As GeneralManager = New GeneralManager("钟精励")
'设置上级
jingli.SetSuperior(zongjian)
zongjian.SetSuperior(zhongjingli)
Dim myRequest As Request = New Request
myRequest.requestType = "请假"
myRequest.RequestContent = "小菜请假"
myRequest.Number = 1
jingli.RequestApplication(myRequest)
myRequest = New Request
myRequest.requestType = "请假"
myRequest.RequestContent = "小菜请假"
myRequest.Number = 4
jingli.RequestApplication(myRequest)
myRequest = New Request
myRequest.requestType = "加薪"
myRequest.RequestContent = "小菜请求加薪"
myRequest.Number = 500
jingli.RequestApplication(myRequest)
myRequest = New Request
myRequest.requestType = "加薪"
myRequest.RequestContent = "小菜请求加薪"
myRequest.Number = 1000
jingli.RequestApplication(myRequest)
Console.Read()
End Sub
End Module