Pola Rantai Tanggung Jawab: Banyak objek terhubung ke dalam rantai dengan referensi yang sesuai dengan rumah berikutnya dari objek mereka, dan permintaan dilewatkan pada rantai ini sampai objek penerima pada rantai memproses permintaan. Karena klien yang meminta tidak tahu siapa yang pada akhirnya akan menangani permintaan pada rantai, sistem dapat secara dinamis mengatur ulang dan mengalokasikan tanggung jawab tanpa mempengaruhi klien, sehingga menghindari penggabungan antara pengirim permintaan dan penangan permintaan.
Ada tiga peran yang terlibat dalam rantai tanggung jawab:
1. Peran prosesor abstrak
2. Peran penangan khusus
3. Contoh kecil pengirim permintaan: Misalkan Anda pergi untuk membeli rumah, dan Anda perlu tawar -menawar saat membeli rumah. Posisi orang yang menjual rumah berbeda, dan harga diskon juga berbeda. Posisi yang berbeda dapat membentuk rantai untuk memproses permintaan. Kami Tentatif Menetapkan: * Penjual akar rumput hanya dapat menawarkan diskon 3% * Manajer Penjualan: Diskon 5% * Direktur Penjualan: Diskon 8% * Bos: Diskon 10%
Instance java
Diagram kelas:
/ *** Tanggung jawab abstrak*/ kelas abstrak publik ifilter {private ifilter penerus; public ifilter getsuccessor () {Return Suscector; } public void setSuccessor (Suscer ifilter) {this.successor = penerus; } public abstrak void handlefilter (); public abstrak void handlefilter2 (); } / *** Tanggung Jawab Khusus*/ Concretefilter kelas publik meluas ifilter {name string privat; public concretefilter (nama string) {this.name = name; } @Override public void handleFilter () { / * * Tangani terlebih dahulu, jika ada penerus, maka tangani sekali * / System.out.println (name + "Request diproses"); if (getsuccessor ()! = null) {getsuccessor (). handlefilter (); }} @Override public void handleFilter2 () { / * * Jika ada penerus, maka penerus akan ditangani sendiri. Kalau tidak, Anda akan menanganinya sendiri*/ if (getsuccessor ()! = Null) {getsuccessor (). Handlefilter2 (); } else {System.out.println (name + "Request diproses"); }}} Tes Kelas Publik {public static void main (string [] args) {ifilter filter1 = concretefilter baru ("izin-filter"); // filter izin ifilter filter2 = concretefilter baru ("filter-filter"); // suffix filter ifilter3 = concretefilter baru ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter) (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter (" filter ("filter ("); filter2.setsuccessor (filter3); System.out.println ("----- Berikut ini ditangani oleh setiap prosesor (termasuk penerus), pesanan juga merupakan lulus level-demi-level ------"); filter1.handlefilter (); System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Mencetak:
------ Berikut ini adalah proses setiap prosesor (termasuk penerus), dan pesanan juga satu tingkat demi satu ----- izin-filter menangani permintaan-filter permintaan yang menangani permintaan-filter permintaan menangani permintaan ------- berikut ini adalah proses yang terakhir Penerus ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------