访问者模式(python)

"""
访问者模式
状态模式复杂版,状态模式是一个复杂对象有多个分支,然后把这些分支抽象成状态,在运行时根据状态来执行;
而访问者模式是多个复杂对象有同样多的分支,且复杂对象的个数相对稳定,不然到时候就修改该分支状态类的代码
"""
from abc import ABCMeta, abstractmethod


class Person(object):
    __metaclass__ = ABCMeta

    def __init__(self, name):
        self.name = name
        pass

    @abstractmethod
    def display(self, state):
        pass


class Man(Person):
    def __init__(self, name):
        super(Man, self).__init__(name)

    def display(self, state):
        state.man_display(self)


class Woman(Person):
    def __init__(self, name):
        super(Woman, self).__init__(name)

    def display(self, state):
        state.woman_display(self)


class State(object):
    __metaclass__ = ABCMeta

    def __init__(self):
        pass

    @abstractmethod
    def man_display(self, man):
        pass

    @abstractmethod
    def woman_display(self, woman):
        pass


class Marry(State):
    def __init__(self):
        super(Marry, self).__init__()

    def man_display(self, man):
        print("男人结婚如进坟墓")
        print("{0},你好可伶".format(man.name))
        print("")

    def woman_display(self, woman):
        print("女人结婚好幸福")
        print("{0},你好幸福".format(woman.name))
        print("")


class Work(State):
    def __init__(self,):
        super(Work, self).__init__()

    def man_display(self, man):
        print("男人工作说起来都是泪")
        print("{0},你好可伶".format(man.name))
        print("")

    def woman_display(self, woman):
        print("女人工作就是玩")
        print("{0},你好幸福".format(woman.name))
        print("")


class Creator(object):
    def __init__(self):
        self.person_list = []
        pass

    def append(self, person):
        self.person_list.append(person)

    def display(self, state):
        for person in self.person_list:
            person.display(state)


if __name__ == '__main__':
    creator = Creator()
    creator.append(Man("张三"))
    creator.append(Woman("翠翠"))

    marry = Marry()
    work = Work()

    creator.display(marry)
    creator.display(work)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值