informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Pola Rantai Tanggung Jawab adalah pola desain perilaku yang memungkinkan beberapa objek menangani permintaan secara berurutan, dan setiap objek dapat memilih apakah akan menangani permintaan atau meneruskannya ke objek berikutnya. Pola ini memberikan fleksibilitas dan skalabilitas yang lebih besar dengan memisahkan pengirim dan penerima permintaan. Berikut ini adalah pengenalan rinci tentang model rantai tanggung jawab:
Inti dari model rantai tanggung jawab adalah merancang rantai permintaan dan mengidentifikasi ujung rantai. Ini menghubungkan beberapa objek penanganan permintaan ke dalam sebuah rantai dan memungkinkan permintaan meneruskan rantai tersebut hingga objek dalam rantai tersebut memutuskan untuk menangani permintaan tersebut. Klien yang membuat permintaan tidak mengetahui objek mana dalam rantai yang pada akhirnya akan menangani permintaan tersebut, yang memungkinkan sistem untuk mengatur ulang dan menetapkan tanggung jawab secara dinamis tanpa mempengaruhi klien.
Diagram Kelas:
Model rantai tanggung jawab terutama mencakup peran-peran berikut:
Penangan abstrak (Handler) : Menentukan antarmuka untuk memproses permintaan. Jika diperlukan, antarmuka dapat menentukan metode untuk mengatur dan mengembalikan referensi ke antarmuka berikutnya. Peran ini biasanya diimplementasikan oleh kelas abstrak atau antarmuka.
Penangan Beton : Setelah menerima permintaan, pemroses tertentu dapat memilih untuk memproses permintaan tersebut atau meneruskan permintaan tersebut ke pihak berikutnya. Karena pengolah beton menyimpan referensi ke rumah berikutnya, pengolah beton dapat mengakses rumah berikutnya jika diperlukan.
Kelas klien (Klien): Membuat rantai pemrosesan dan mengirimkan permintaan ke objek prosesor tertentu dari kepala rantai.
Model rantai tanggung jawab cocok untuk skenario berikut:
Beberapa objek secara bersama-sama memproses suatu tugas: Misalnya, sistem persetujuan bertingkat meneruskan permintaan persetujuan ke tingkat pemberi persetujuan berikutnya berdasarkan wewenang dan tingkat pemberi persetujuan hingga diperoleh hasil persetujuan akhir.
Alur pemrosesan kombinasi dinamis: Dengan mengonfigurasi rantai tanggung jawab secara fleksibel, objek pemrosesan dapat digabungkan secara dinamis untuk mengimplementasikan proses pemrosesan yang berbeda.
Hindari hubungan langsung antara pengirim dan penerima permintaan: Dengan meneruskan permintaan ke rantai tanggung jawab, pengirim permintaan tidak perlu mengetahui objek pemrosesan spesifik, sehingga mengurangi ketergantungan antar objek.
Model rantai tanggung jawab banyak digunakan di banyak bidang, termasuk namun tidak terbatas pada:
Berikut adalah contoh implementasi sederhana dari pola rantai tanggung jawab, yang digunakan untuk memproses pesan log dan meneruskan pesan ke prosesor yang berbeda sesuai dengan tingkat log (seperti DEBUG, INFO, WARN, ERROR):
- // 抽象处理者
- abstract class LogHandler {
- protected int level;
- protected LogHandler nextHandler;
-
- public void setNextHandler(LogHandler nextHandler) {
- this.nextHandler = nextHandler;
- }
-
- //这个是精髓:他除了处理自己的逻辑,还会调用nextHandler进行处理
- public void logMessage(int level, String message) {
- if (this.level <= level) {
- write(message);
- }
- if (nextHandler != null) {
- nextHandler.logMessage(level, message);
- }
- }
-
- abstract protected void write(String message);
- }
-
- // 具体处理者:ErrorLogHandler
- class ErrorLogHandler extends LogHandler {
- public ErrorLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("ErrorLogHandler: " + message);
- }
- }
-
- // 具体处理者:WarnLogHandler
- class WarnLogHandler extends LogHandler {
- public WarnLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("WarnLogHandler: " + message);
- }
- }
-
- // 具体处理者:InfoLogHandler
- class InfoLogHandler extends LogHandler {
- public InfoLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("InfoLogHandler: " + message);
- }
- }
-
- // 客户端代码
- public class ChainPatternDemo {
- private static LogHandler getChainOfLoggers() {
- // 创建链中的处理者
- LogHandler errorLogHandler = new ErrorLogHandler(3);
-
- LogHandler warnLogHandler = new WarnLogHandler(2);
- warnLogHandler.setNextHandler(errorLogHandler);
-
- LogHandler infoLogHandler = new InfoLogHandler(1);
- infoLogHandler.setNextHandler(warnLogHandler);
-
- return infoLogHandler;
- }
-
- public static void main(String[] args) {
- LogHandler loggerChain = getChainOfLoggers();
-
- loggerChain.logMessage(1, "This is an informational message.");
- loggerChain.logMessage(2, "This is a warning message.");
- loggerChain.logMessage(3, "This is an error message.");
- }
- }
Dalam contoh ini, kita mendefinisikan tiga kelas pengendali log konkrit (ErrorLogHandler
、WarnLogHandler
、InfoLogHandler
), masing-masing menangani tingkat pesan log yang berbeda. Setiap penangan berisi level (level
), digunakan untuk menentukan apakah pesan pada tingkat ini harus diproses.Dengan menyebutlogMessage
metode, permintaan diteruskan ke penangan pertama dalam rantai (infoLogHandler
), ia memutuskan apakah akan memproses pesan berdasarkan level dan logika pemrosesannya sendiri, dan kemudian (jika tidak diproses) meneruskan permintaan tersebut ke prosesor berikutnya dalam rantai tersebut. Proses ini berlanjut hingga akhir rantai atau hingga permintaan diproses.
Perhatikan bahwa dalam aplikasi nyata, Anda mungkin perlu melakukannyaLogHandler
Kelas ini menambahkan lebih banyak metode dan properti untuk mendukung logika dan konfigurasi pemrosesan log yang lebih kompleks. Selain itu, level log biasanya menggunakan enumerasi (enum
) alih-alih bilangan bulat untuk meningkatkan keterbacaan dan pemeliharaan kode.
Pola rantai tanggung jawab mencapai pemrosesan permintaan yang fleksibel dan skalabilitas sistem dengan menghubungkan beberapa objek yang menangani permintaan ke dalam sebuah rantai dan memungkinkan permintaan meneruskan rantai tersebut hingga objek dalam rantai tersebut memutuskan untuk menangani permintaan tersebut.
Jika model rantai tanggung jawab bermanfaat bagi Anda, ingatlah untuk menyukai dan menyimpannya.