加薪代码初步:
#!/usr/bin/env python
class Request:
@property
def RequestType(self):
return self.__requestType
@RequestType.setter
def RequestType(self,value):
self.__requestType = value
@property
def RequestContent(self):
return self.__requestContent
@RequestContent.setter
def RequestContent(self,value):
self.__requestContent = value
@property
def Number(self):
return self.__number
@Number.setter
def Number(self,value):
self.__number = value
class Manager:
def __init__(self,name):
self._name = name
def GetResult(self, managerLevel, request):
if(managerLevel == 'manager'):
if ((request.RequestType == 'leave') and (request.Number <= 2)) :
print(self._name, request.RequestContent,'Number',request.Number,' is approved')
else:
print(self._name, request.RequestContent,'Number',request.Number,' is not approved, is not my authority')
elif(managerLevel == 'director'):
if ((request.RequestType == 'leave') and (request.Number <= 5)) :
print(self._name, request.RequestContent,'Number',request.Number,' is approved')
else:
print(self._name, request.RequestContent,'Number',request.Number,' is not approved, is not my authority')
elif(managerLevel == 'general manager'):
if (request.RequestType == 'leave') :
print(self._name, request.RequestContent,'Number',request.Number,' is approved')
elif (request.RequestType == 'salary raise') :
if (request.Number <= 500):
print(self._name, request.RequestContent,'Number',request.Number,' is approved')
else:
print(self._name, request.RequestContent,'Number',request.Number,' is a little hard, let us talk about it later' )
def main():
mr1 = Manager('Lily')
mr2 = Manager('Tom')
mr3 = Manager('Jack')
rt = Request()
rt.RequestType = 'salary raise'
rt.RequestContent = 'freshman apply for a salary raise'
rt.Number = 1000
mr1.GetResult('manager',rt)
mr2.GetResult('director',rt)
mr3.GetResult('general manager', rt)
rt2 = Request()
rt2.RequestType = 'leave'
rt2.RequestContent = 'freshman apply for a annual leave'
rt2.Number = 3
mr1.GetResult('manager',rt2)
mr2.GetResult('director',rt2)
mr3.GetResult('general manager', rt2)
if __name__ == '__main__':
main()
职责链模式:
#!/usr/bin/env python
from abc import abstractmethod,ABCMeta
class Handler:
__metaclass__ = ABCMeta
def SetSuccessor(self, successor):
self._successor = successor
@abstractmethod
def HandleRequest(self, request):
pass
class ConcreteHandler1(Handler):
def HandleRequest(self, request):
if request >= 0 and request <= 10:
print(self.__class__.__name__, 'handle request ', request)
elif self._successor != None:
self._successor.HandleRequest(request)
class ConcreteHandler2(Handler):
def HandleRequest(self, request):
if request >= 10 and request <= 20:
print(self.__class__.__name__, 'handle request ', request)
elif self._successor != None:
self._successor.HandleRequest(request)
class ConcreteHandler3(Handler):
def HandleRequest(self, request):
if request >= 20 and request <= 30:
print(self.__class__.__name__, 'handle request ', request)
elif self._successor != None:
self._successor.HandleRequest(request)
def main():
ch1 = ConcreteHandler1()
ch2 = ConcreteHandler2()
ch3 = ConcreteHandler3()
ch1.SetSuccessor(ch2)
ch2.SetSuccessor(ch3)
request = [2,5,14,22,18,3,27,20]
for rt in request:
ch1.HandleRequest(rt)
if __name__ == '__main__':
main()
加薪代码重构:
#!/usr/bin/env python
from abc import ABCMeta, abstractmethod
class Request:
@property
def RequestType(self):
return self.__requestType
@RequestType.setter
def RequestType(self,value):
self.__requestType = value
@property
def RequestContent(self):
return self.__requestContent
@RequestContent.setter
def RequestContent(self,value):
self.__requestContent = value
@property
def Number(self):
return self.__number
@Number.setter
def Number(self,value):
self.__number = value
class Manager:
__metaclass__ = ABCMeta
def __init__(self, name):
self._name = name
def SetSuperior(self, superior):
self._superior = superior
@abstractmethod
def RequestApplications(self, request):
pass
class CommonManager(Manager):
def __init__(self,name):
super(CommonManager,self).__init__(name)
def RequestApplications(self, request):
if request.RequestType == 'leave' and request.Number <= 2:
print(self.__class__.__name__,':', request.RequestContent,'number',request.Number,'is approved')
else:
if self._superior != None:
self._superior.RequestApplications(request)
class Majordomo(Manager):
def __init__(self,name):
super(Majordomo,self).__init__(name)
def RequestApplications(self, request):
if request.RequestType == 'leave' and request.Number <= 5:
print(self.__class__.__name__,':', request.RequestContent,'number',request.Number,'is approved')
else:
if self._superior != None:
self._superior.RequestApplications(request)
class GeneralManager(Manager):
def __init__(self,name):
super(GeneralManager,self).__init__(name)
def RequestApplications(self, request):
if request.RequestType == 'leave':
print(self.__class__.__name__,':', request.RequestContent,'number',request.Number,'is approved')
elif(request.RequestType == 'salary raise') :
if (request.Number <= 500):
print(self.__class__.__name__, request.RequestContent,'Number',request.Number,' is approved')
else:
print(self.__class__.__name__, request.RequestContent,'Number',request.Number,' is a little hard, let us talk about it later' )
def main():
cm = CommonManager('Lily')
md = Majordomo('Tom')
gm = GeneralManager('Jack')
cm.SetSuperior(md)
md.SetSuperior(gm)
rt = Request()
rt.RequestType = 'salary raise'
rt.RequestContent = 'freshman apply for a salary raise'
rt.Number = 1000
cm.RequestApplications(rt)
rt2 = Request()
rt2.RequestType = 'leave'
rt2.RequestContent = 'freshman apply for a annual leave'
rt2.Number = 3
cm.RequestApplications(rt2)
if __name__ == '__main__':
main()