設計模式之職責鏈模式

2021-06-16 15:23:00 字數 1738 閱讀 8006

如果我們現在有乙個需求,乙個人他生了病,這個病要在**醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他

你的病我這裡看不了,你要去**醫院才能看,最後他去**醫院把病看好了.

這個過程直接寫成**:

class patient

this.patienttype = patienttype;

} public int getpatienttype()

}class hospital }}

public class main

}

hospital類中的seedoctor的責任太多違背了單一職責的原則,如果我們要去增加另外等級的醫院(現在醫院只有**的劃分,不過這裡只做假設),這時我們就需要修改hospital類,

違背了開閉原則.這麼可以考慮一下把hospital抽象出來,然後一級hospital,二級hospital,**hospital繼承hospital,但是子類怎麼去處理patient?這裡我們可以這樣考慮,把

patient先交給一級hospital,如果一級hospital沒有資格處理那麼就交給二級hospital,最後不行的話就交給**hospital。這就是職責鏈模式。

職責鏈模式:使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係.將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止.

接收者和傳送者都沒有物件的明確資訊,且鏈中的物件自己也並不知道鏈的結構.結果是職責鏈可簡化物件的相互連線,它們僅需保持乙個指向後繼者的引用,而不需要保持它所有

的.按照剛才的思路設計出的的uml

//處理請求

public abstract void handlerequest(patient request);

}fristlevelhospital.class

public class fristlevelhospital extends hospitalhandlerelseelse

} }}

secondlevelhospital.class

public class secondlevelhospital  extends hospitalhandlerelseelse

} }}

thirdlevelhospital.class

public class thirdlevelhospital  extends hospitalhandlerelseelse

} }

patient.class

public class patient 

this.patienttype = patienttype;

} public int getpatienttype()

}

main.class

public class main 

}

最後輸出:

三 級醫院醫治病人

設計模式之職責鏈模式

職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。適用場景 1 有多個的物件可以處理乙個請求,哪個物件處理該請求執行時刻自動確定 2 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求 ...

設計模式之職責鏈模式

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

設計模式之職責鏈模式

職責鏈模式 chain of responsibility pattern 使多個物件都有機會處理請求,從而避免請求傳送者和請求的接受者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞請求,知道有乙個物件處理它為止。職責鏈模式的核心思路 客戶端只需要傳送請求,職責鏈上的處理者負責處理,客戶端不...