025 Visual Basic 职责链模式

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值