# -*- coding: utf-8 -*-
"""
Created on Thu Mar 29 16:52:56 2018
@author: mz
"""
class Aggregate(object):
def __init__(self):
self._elmlst = []
def Attach(self, elm):
self._elmlst.append(elm)
def Accept(self, vistor):
for e in self._elmlst:
e.Accept(vistor)
class Element(object):
def __init__(self):
self.permitted = True
self.name = ""
def Accept(self, visitor):
pass
class RollerCoaster(Element):
def Accept(self, visitor):
self.name = "Roller coaster"
if visitor.__class__.__name__ == "Boy":
self.permitted = False
else:
self.permitted = True
visitor.Visit(self)
class PirateBoat(Element):
def Accept(self, visitor):
self.name = "Pirate Boat"
self.permitted = True
visitor.Visit(self)
class Visitor(object):
def Visit(self, elm):
pass
class Boy(Visitor):
def Visit(self, elm):
print("Boy visits %s, permitted: %s " % (elm.name, elm.permitted))
class Adult(Visitor):
def Visit(self, elm):
print("Adult visits %s, permitted: %s" % (elm.name, elm.permitted))
if "__main__" == __name__:
aggrea = Aggregate()
elmRoller = RollerCoaster()
elmPirate = PirateBoat()
aggrea.Attach(elmRoller)
aggrea.Attach(elmPirate)
boy = Boy()
adult = Adult()
print("---boy visits---")
aggrea.Accept(boy)
print("\r\n---adult visits---")
aggrea.Accept(adult)
运行结果:
---boy visits---
Boy visits Roller coaster, permitted: False
Boy visits Pirate Boat, permitted: True
---adult visits---
Adult visits Roller coaster, permitted: True
Adult visits Pirate Boat, permitted: True