# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
"""
@author: Edgar
这是参观者模式的一个应用场景。(具体故事情节请见《设计模式之禅》)
·参观者模式能为不同的类提供接口一致,但具体实现不同的方法。即为不同的被访问提出
量身定制的反馈。
"""
class Employee(object):
def __init__(self, basicInfo=None):
self.basicInfo = basicInfo
def updateBasicInfo(self, info):
self.basicInfo.update(info)
def accept(self, visitor):
visitor.visit(self)
class CommEmployee(Employee):
def __init__(self, basicInfo=None, job=None):
super(CommEmployee, self).__init__(basicInfo)
self.job = job
def setJob(self, job):
self.job = job
class ManagerEmployee(Employee):
def __init__(self, basicInfo=None, performence=None):
super(ManagerEmployee, self).__init__(basicInfo)
self.performence = performence
def setPerformencr(self, performence):
self.performence = performence
class Visitor(object):
def CommEmployeeInfo(self, obj):
info = '工作内容是: {0}'.format(obj.job)
return info
def ManagerEmployeeInfo(self, obj):
info = '业绩表现为: {0}'.format(obj.performence)
return info
def visit(self, obj):
#游客参观完后会对不同的类做出不同的反馈
info = ''
for key in obj.basicInfo:
info += key + ':' + str(obj.basicInfo[key]) + '\n'
#根据类名选择相应的函数。
funName = obj.__class__.__name__ + 'Info'
specialInfo = self.__class__.__dict__[funName](self, obj)
info += specialInfo + '\n'
print info
# return info
if __name__ == '__main__':
basicDic = {'name':None, 'sex':None, 'salary':None}
zhangsan = CommEmployee({'name':'张三', 'sex':'男', 'salary':8000},\
'程序员')
lisi = ManagerEmployee({'name':'李四', 'sex':'男', 'salary':16000},\
'优')
visitor = Visitor()
zhangsan.accept(visitor)
lisi.accept(visitor)
设计模式之参观者模式
最新推荐文章于 2020-10-09 19:55:08 发布