設計模式之職責模式

2022-05-12 04:07:17 字數 3786 閱讀 5833

from abc import

abcmeta, 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 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者...