from abc importabcmeta, abstractmethod
#職責模式又稱為責任鏈模式
#譬如在公司中請假,如果是2天以內,部門領導有權力審批,2天到5天,還需分管領導,5天以上,提交行政部門
#這樣每一級可以動態判斷自己是否可以審批,如果沒有權力,就一級一級往上報
class request(metaclass=abcmeta):
"""請求(內容)
"""def
__init__
(self, name, dayoff, reason):
self._name =name
self._dayoff =dayoff
self._reason =reason
self._leader =none
defgetname(self):
return
self._name
defsetname(self, name):
self._name =name
defgetdayoff(self):
return
self._dayoff
defsetdayoff(self, dayoff):
self._dayoff =dayoff
defgetleader(self):
return
self._leader
defsetleader(self, leader):
self._leader =leader
defsendrequest(self):
print(f"
因為申請請假天")
if self._leader is
notnone:
self._leader.handlerequest(self)
else
:
print("
您最大,不用向別人請假")
class responsible(metaclass=abcmeta):
"""責任人抽象
"""def
__init__
(self, name, title):
self._name =name
self._title =title
self._nextleader =none
defgetname(self):
return
self._name
defgettitle(self):
return
self._title
defsetnextleader(self, nextleader):
self._nextleader =nextleader
defgetnextleader(self):
return
self._nextleader
defhandlerequest(self, request):
"""請求處理
"""#
當前責任人處理請求
self._handlerequestimpl(request)
if self._nextleader is
notnone:
self._nextleader.handlerequest(request)
@abstractmethod
def_handlerequestimpl(self, request):
"""真正處理請求的方法
"""pass
class
person(request):
pass
class
supervisor(responsible):
"""主管
"""def
__init__
(self, name, title):
super().
__init__
(name, title)
def_handlerequestimpl(self, request):
if(request.getdayoff() < 2):
print(f"
同意請假,簽字人:()")
class
departmentmanager(responsible):
"""部門總監
"""def
__init__
(self, name, title):
super().
__init__
(name, title)
def_handlerequestimpl(self, request):
if(request.getdayoff() > 2 and request.getdayoff() < 5):
print(f"
同意請假,簽字人:()")
class
ceo(responsible):
"""ceo
"""def
__init__
(self, name, title):
super().
__init__
(name, title)
def_handlerequestimpl(self, request):
if(request.getdayoff() > 5 and request.getdayoff() < 22):
print(f"
同意請假,簽字人:()")
class
adminstrator(responsible):
"""行政人員
"""def
__init__
(self, name, title):
super().
__init__
(name, title)
def_handlerequestimpl(self, request):
print(f"
的請假申請已審核,情況屬實!已備案處理。處理人:()")
deftest():
directorleader = supervisor("
eren
", "
客戶端研發部經理")
departmentmanager = departmentmanager("
eric
", "
技術研發中心總監")
directorleader.setnextleader(departmentmanager)
ceo = ceo("
helen
", "
創新文化公司ceo")
departmentmanager.setnextleader(ceo)
adminstrator = adminstrator("
nina
", "
行政中心總監")
ceo.setnextleader(adminstrator)
will = person("
will
", 1, "
參加mdcc大會")
will.setleader(directorleader)
will.sendrequest()
tom = person("
tom", 20, "結婚"
) tom.setleader(directorleader)
tom.sendrequest()
if__name__ == "
__main__":
test()
設計模式之職責鏈模式
如果我們現在有乙個需求,乙個人他生了病,這個病要在 醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他 你的病我這裡看不了,你要去 醫院才能看,最後他去 醫院把病看好了.這個過程直接寫成 class patient this.patient...
設計模式之職責鏈模式
職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。適用場景 1 有多個的物件可以處理乙個請求,哪個物件處理該請求執行時刻自動確定 2 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求 ...
設計模式之職責鏈模式
職責鏈模式 chain of responsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者...