Python设计模式--责任链模式

def function_1(in_string):
    print(in_string)
    return ''.join([x for x in in_string if x != '1'])


def function_2(in_string):
    print(in_string)
    return ''.join([x for x in in_string if x != '2'])


def function_3(in_string):
    print(in_string)
    return ''.join([x for x in in_string if x != '3'])


def function_4(in_string):
    print(in_string)
    return ''.join([x for x in in_string if x != '4'])


def main_function(input_string):
    if "1" in input_string:
        input_string = function_1(input_string)
    if "2" in input_string:
        input_string = function_2(input_string)
    if "3" in input_string:
        input_string = function_3(input_string)
    if "4" in input_string:
        input_string = function_4(input_string)


if __name__ == '__main__':
    main_function("1221345439")


# 实现责任链
class CatchAll(object):
    def __init__(self):
        self.next_to_excute = None

    def excute(self, request):
        print(request)


class Function1Class(object):
    def __init__(self):
        self.next_to_excute = CatchAll()

    def excute(self, request):
        if "1" in request:
            print("Executing Type Function1Class with request [{}]".format(request))
            request = ''.join([x for x in request if x != '1'])
        self.next_to_excute.excute(request)


class Function2Class(object):
    def __init__(self):
        self.next_to_excute = CatchAll()

    def excute(self, request):
        if "2" in request:
            print("Executing Type Function2Class with request [{}]".format(request))
            request = ''.join([x for x in request if x != '2'])
        self.next_to_excute.excute(request)


class Function3Class(object):
    def __init__(self):
        self.next_to_excute = CatchAll()

    def excute(self, request):
        if "3" in request:
            print("Executing Type Function3Class with request [{}]".format(request))
            request = ''.join([x for x in request if x != '3'])
        self.next_to_excute.excute(request)


class Function4Class(object):
    def __init__(self):
        self.next_to_excute = CatchAll()

    def excute(self, request):
        if "4" in request:
            print("Executing Type Function4Class with request [{}]".format(request))
            request = ''.join([x for x in request if x != '4'])
        self.next_to_excute.excute(request)


def main_function(head, request):
    head.excute(request)


if __name__ == '__main__':
    hd = Function1Class()

    current = hd
    current.next_to_excute = Function2Class()

    current = current.next_to_excute
    current.next_to_excute = Function3Class()

    current = current.next_to_excute
    current.next_to_excute = Function4Class()

    main_function(hd, "12214549")


# 责任链的另一种实现
class Disapatcher(object):
    def __init__(self, handlers=[]):
        self.handlers = handlers

    def handle_request(self, request):
        for handle in self.handlers:
            request = handle(request)
        return request


def function_1(in_string):
    print(in_string)
    return ''.join([x for x in in_string if x != '1'])


def function_2(in_string):
    print(in_string)
    return ''.join([x for x in in_string if x != '2'])


def function_3(in_string):
    print(in_string)
    return ''.join([x for x in in_string if x != '3'])


def function_4(in_string):
    print(in_string)
    return ''.join([x for x in in_string if x != '4'])


def main1(request):
    dispatcher = Disapatcher([function_1, function_2, function_3, function_4])
    dispatcher.handle_request(request)


if __name__ == '__main__':
    main1("1221345439")


# 责任链的简单实现
class EndHandler(object):
    def __init__(self):
        pass

    def handle_request(self, request):
        pass


class Hander1(object):
    def __init__(self):
        self.next_handler = EndHandler()

    def handler_request(self, requset):
        self.next_handler.handle_request(requset)


def main(requset):
    concrete_handler = Hander1()

    concrete_handler.handler_request(requset)


if __name__ == '__main__':
    main('requset')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值