访问者模式(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)


访问者模式是一种行为设计模式,它允许你定义一系列操作,而这些操作可以应用于某个对象结构中的元素。通过这种方式,你可以在不改变各元素类的前提下,定义作用于这些元素的新操作。 在 Python 中,访问者模式通常由两个类组成:元素类和访问者类。元素类表示对象结构中的元素,而访问者类则表示要对这些元素执行的操作。 下面是一个简单的示例代码: ```python class Element: def accept(self, visitor): pass class ConcreteElementA(Element): def accept(self, visitor): visitor.visit_concrete_element_a(self) class ConcreteElementB(Element): def accept(self, visitor): visitor.visit_concrete_element_b(self) class Visitor: def visit_concrete_element_a(self, element): pass def visit_concrete_element_b(self, element): pass class ConcreteVisitor1(Visitor): def visit_concrete_element_a(self, element): print("ConcreteVisitor1 visited ConcreteElementA") def visit_concrete_element_b(self, element): print("ConcreteVisitor1 visited ConcreteElementB") class ConcreteVisitor2(Visitor): def visit_concrete_element_a(self, element): print("ConcreteVisitor2 visited ConcreteElementA") def visit_concrete_element_b(self, element): print("ConcreteVisitor2 visited ConcreteElementB") elements = [ConcreteElementA(), ConcreteElementB()] visitors = [ConcreteVisitor1(), ConcreteVisitor2()] for element in elements: for visitor in visitors: element.accept(visitor) ``` 在上面的代码中,我们定义了两个元素类 ConcreteElementA 和 ConcreteElementB,以及两个访问者类 ConcreteVisitor1 和 ConcreteVisitor2。元素类都实现了 accept 方法,该方法接受一个访问者对象作为参数,并调用该访问者对象的 visit 方法。访问者类则实现了 visit 方法,该方法接受一个元素对象作为参数,并对该元素对象执行相应的操作。 在主程序中,我们创建了两个元素对象和两个访问者对象,并依次将每个元素对象传递给每个访问者对象的 visit 方法。这样,每个访问者对象都会对每个元素对象执行相应的操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值