Python 代码:
Visitor Pattern with Python Code
from abc import abstractmethod,ABCMeta
定义一个表示元素(Element)的接口
class ComputerPart(metaclass=ABCMeta):
@abstractmethod def accept(self, inComputerPartVisitor): pass
#创建阔爱站了ComputerPart的实体类 class Keyboard(ComputerPart):
def accept(self, inComputerPartVisitor): inComputerPartVisitor.visitKeyboard(self)
class Monitor(ComputerPart):
def accept(self, inComputerPartVisitor): inComputerPartVisitor.visitMonitor(self)
class Mouse(ComputerPart):
def accept(self, inComputerPartVisitor): inComputerPartVisitor.visitMouse(self)
class Computer(ComputerPart):
_parts = [] def __init__(self): self._parts.append(Mouse()) self._parts.append(Keyboard()) self._parts.append(Monitor()) def accept(self, inComputerPartVisitor): for aPart in self._parts : aPart.accept(inComputerPartVisitor) inComputerPartVisitor.visitComputer(self)
定义一个表示访问者的接口
class ComputerPartVisitor(metaclass=ABCMeta):
@abstractmethod def visitComputer(self,inComputer): pass @abstractmethod def visitMouse(self,inMouse): pass @abstractmethod def visitKeyboard(self,inKeyboard): pass @abstractmethod def visitMonitor(self,inMonitor): pass
实现访问者接口的实体类
class ComputerPartDisplayVisitor(ComputerPartVisitor):
def visitComputer(self,inComputer): print("Displaying {0}. Called in {1}".format(inComputer.__class__.__name__,self.__class__.__name__)) def visitMouse(self,inMouse): print("Displaying {0}. Called in {1}".format(inMouse.__class__.__name__,self.__class__.__name__)) def visitKeyboard(self,inKeyboard): print("Displaying {0}. Called in {1}".format(inKeyboard.__class__.__name__,self.__class__.__name__)) def visitMonitor(self,inMonitor): print("Displaying {0}. Called in {1}".format(inMonitor.__class__.__name__,self.__class__.__name__))
调用输出
if name == ‘main’:
aComputer = Computer() aComputer.accept(ComputerPartDisplayVisitor())</pre>
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/13794.html