Mô hình chuỗi trách nhiệm
Như tên cho thấy, mẫu chuỗi trách nhiệm tạo ra một chuỗi các đối tượng người nhận cho một yêu cầu. Mẫu này phân tách người gửi và người nhận một yêu cầu dựa trên loại yêu cầu. Mô hình này nằm dưới các khuôn mẫu hành vi.
Trong mô hình này, thông thường mỗi bộ thu chứa tham chiếu đến bộ thu khác. Nếu một đối tượng không thể xử lý yêu cầu thì nó sẽ chuyển tương tự cho người nhận tiếp theo, v.v.
Thực hiện
Chúng tôi đã tạo một lớp trừu tượng AbstractLogger với mức độ ghi nhật ký. Sau đó, chúng tôi đã tạo ba loại trình ghi nhật ký mở rộng AbstractLogger . Mỗi trình ghi nhật ký kiểm tra mức độ của thông báo đến mức của nó và in tương ứng, nếu không sẽ không in và chuyển thông báo đến bộ ghi tiếp theo của nó.
Bước 1
Tạo một lớp trình ghi tóm tắt.
AbstractLogger.java
public abstract class AbstractLogger {
public static int INFO = 1;
public static int DEBUG = 2;
public static int ERROR = 3;
protected int level;
//next element in chain or responsibility
protected AbstractLogger nextLogger;
public void setNextLogger(AbstractLogger nextLogger){
this.nextLogger = nextLogger;
}
public void logMessage(int level, String message){
if(this.level <= level){
write(message);
}
if(nextLogger !=null){
nextLogger.logMessage(level, message);
}
}
abstract protected void write(String message);
}
Bước 2
Tạo các lớp cụ thể mở rộng bộ ghi nhật ký.
ConsoleLogger.java
public class ConsoleLogger extends AbstractLogger {
public ConsoleLogger(int level){
this.level = level;
}
@Override
protected void write(String message) {
System.out.println("Standard Console::Logger: " + message);
}
}
ErrorLogger.java
public class ErrorLogger extends AbstractLogger {
public ErrorLogger(int level){
this.level = level;
}
@Override
protected void write(String message) {
System.out.println("Error Console::Logger: " + message);
}
}
FileLogger.java
public class FileLogger extends AbstractLogger {
public FileLogger(int level){
this.level = level;
}
@Override
protected void write(String message) {
System.out.println("File::Logger: " + message);
}
}
Bước 3
Tạo các loại ghi nhật ký khác nhau. Gán chúng mức độ lỗi và đặt trình ghi tiếp theo trong mỗi trình ghi. Trình ghi tiếp theo trong mỗi trình ghi đại diện cho một phần của chuỗi.
ChainPatternDemo.java
public class ChainPatternDemo {
private static AbstractLogger getChainOfLoggers(){
AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);
errorLogger.setNextLogger(fileLogger);
fileLogger.setNextLogger(consoleLogger);
return errorLogger;
}
public static void main(String[] args) {
AbstractLogger loggerChain = getChainOfLoggers();
loggerChain.logMessage(AbstractLogger.INFO,
"This is an information.");
loggerChain.logMessage(AbstractLogger.DEBUG,
"This is an debug level information.");
loggerChain.logMessage(AbstractLogger.ERROR,
"This is an error information.");
}
}
Bước 4
Xác minh kết quả đầu ra.
Standard Console::Logger: This is an information.
File::Logger: This is an debug level information.
Standard Console::Logger: This is an debug level information.
Error Console::Logger: This is an error information.
File::Logger: This is an error information.
Standard Console::Logger: This is an error information.