[Design Patterns] Chain Pattern

Giống như tên gọi, Chain giúp chúng ta tạo ra một chuỗi các object tiếp nhận yêu cầu. Mỗi một object trong Chain thường giữ tham chiếu nối tiếp tới một object khác. Nếu một object không thể xử lý yêu cầu nhận được, nó sẽ gửi yêu cầu đó tới object tiếp theo. Chain

Giống như tên gọi, Chain giúp chúng ta tạo ra một chuỗi các object tiếp nhận yêu cầu.
Mỗi một object trong Chain thường giữ tham chiếu nối tiếp tới một object khác.
Nếu một object không thể xử lý yêu cầu nhận được, nó sẽ gửi yêu cầu đó tới object tiếp theo.
Chain được xếp vào nhóm các pattern Hành Vi.

Áp dụng triển khai

sơ đồ các class

Ở đây chúng ta có một phần mềm tiện ích chuyên ghi nhật ký hệ thống. Đầu tiên chúng ta có
AbstractLogger với các mức độ thông báo. Sau đó chúng ta có 3 kiểu logger mở rộng AbstractLogger.
Mỗi logger sẽ kiểm tra mức độ của tin nhắn thông báo và so sánh với mức độ hoạt động của chính nó.
Nếu như mức độ cảnh báo phù hợp thì logger đó sẽ in thông báo ra màn hình,
hoặc nếu không thì sẽ chuyển tin nhắn thông báo đó tới logger tiếp theo.

chainpattern/AbstractLogger.java

packagechainpattern;publicabstractclassAbstractLogger{publicstaticint INFO  =1;publicstaticint DEBUG =2;publicstaticint ERROR =3;protectedint level;protectedAbstractLogger nextLogger;publicvoidsetNextLogger(AbstractLogger nextLogger){this.nextLogger = nextLogger;}publicvoidlogMessage(int level,String message){if(this.level <= level){write(message);}if(nextLogger !=null){
         nextLogger.logMessage(level, message);}}abstractprotectedvoidwrite(String message);}

Bước 2

Tạo các class logger.

chainpattern/ConsoleLogger.java

packagechainpattern;publicclassConsoleLoggerextendsAbstractLogger{publicConsoleLogger(int level){this.level = level;}@Overrideprotectedvoidwrite(String message){System.out.println("Standard Console::Logger: "+ message);}}

chainpattern/ErrorLogger.java

packagechainpattern;publicclassErrorLoggerextendsAbstractLogger{publicErrorLogger(int level){this.level = level;}@Overrideprotectedvoidwrite(String message){System.out.println("Error Console::Logger: "+ message);}}

chainpattern/FileLogger.java

packagechainpattern;publicclassFileLoggerextendsAbstractLogger{publicFileLogger(int level){this.level = level;}@Overrideprotectedvoidwrite(String message){System.out.println("File Console::Logger: "+ message);}}

Bước 3

Tạo chuỗi các logger và gắn mức thông báo cho các logger. Sử dụng chuỗi để in thông báo khi có yêu cầu.

PatternDemo.java

importchainpattern.AbstractLogger;importchainpattern.ConsoleLogger;importchainpattern.ErrorLogger;importchainpattern.FileLogger;publicclassPatternDemo{publicstaticvoidmain(String[] args){AbstractLogger loggerChain =getLoggers();

      loggerChain.logMessage(AbstractLogger.INFO,"This is an information.");
      loggerChain.logMessage(AbstractLogger.DEBUG,"This is an debug information.");
      loggerChain.logMessage(AbstractLogger.ERROR,"This is an error information.");}privatestaticAbstractLoggergetLoggers(){AbstractLogger errorLogger =newErrorLogger(AbstractLogger.ERROR);AbstractLogger fileLogger =newFileLogger(AbstractLogger.DEBUG);AbstractLogger consoleLogger =newConsoleLogger(AbstractLogger.INFO);

      errorLogger.setNextLogger(fileLogger);
      fileLogger.setNextLogger(consoleLogger);return errorLogger;}}

Bước 4

Kiểm chứng lại kết quả được in ra ở console.

console

StandardConsole::Logger:This is an information.
FileConsole::Logger:This is an debug information.
StandardConsole::Logger:This is an debug information.
ErrorConsole::Logger:This is an error information.
FileConsole::Logger:This is an error information.
StandardConsole::Logger:This is an error information.

Nguồn: viblo.asia

Bài viết liên quan

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 2

viết lại nội dung này ” Phát hiện các cuộc tấn công Cross Site Scripting (XSS)

AI Chatbot 2025: Xu Hướng Tất Yếu Cho Doanh Nghiệp Dẫn Đầu

Giới thiệu AI chatbots đã trải qua một hành trình đáng kể, từ những công cụ t

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 1

Tấn công web là gì? Ứng dụng web là các ứng dụng cung cấp dịch vụ cho người

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp Trong kỷ nguyên s