访问者模式(python)

来源:互联网 发布:东南大学翻译硕士 知乎 编辑:程序博客网 时间:2024/06/07 11:09
"""访问者模式状态模式复杂版,状态模式是一个复杂对象有多个分支,然后把这些分支抽象成状态,在运行时根据状态来执行;而访问者模式是多个复杂对象有同样多的分支,且复杂对象的个数相对稳定,不然到时候就修改该分支状态类的代码"""from abc import ABCMeta, abstractmethodclass Person(object):    __metaclass__ = ABCMeta    def __init__(self, name):        self.name = name        pass    @abstractmethod    def display(self, state):        passclass 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):        passclass 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
原创粉丝点击