摘要:每一個都會檢查并且比較消息的等級與該等級,判斷打印或者不打印,并且傳遞消息到下一個。設(shè)置每個的錯誤等級以及每個的,每一個的都是當(dāng)前鏈的一部分。
責(zé)任鏈模式
責(zé)任鏈模式顧名思義,對于一個請求會去創(chuàng)建一條接受者鏈。這種模式會解耦一種類型的請求中接受者和發(fā)送者,該模式模式屬于行為模式的一種。
在該模式當(dāng)中,一般情況下,每個接受者都會有另外一個接受者的引用,如果該接受者無法處理該請求,請求會通過引用傳入下一個接受者。
我們創(chuàng)建一個抽象類AbstaractLogger,該類中含有日志的記錄等級。然后我們會創(chuàng)建三個logger實現(xiàn)AbstractLogger。每一個logger都會檢查并且比較消息的等級與該logger等級,判斷打印或者不打印,并且傳遞消息到下一個logger。
第一步創(chuàng)建一個抽象的Logger類
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); }第二步
創(chuàng)建具體的類實現(xiàn)AtstractLogger
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); } }第三步
創(chuàng)建不同類型的logger。設(shè)置每個Logger的錯誤等級以及每個logger的Next logger,每一個logger的NextLogger都是當(dāng)前鏈的一部分。
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."); } }第四步
校驗輸出
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.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65907.html
摘要:設(shè)計模式目的為了代碼可重用性讓代碼更容易被他人理解保證代碼可靠性設(shè)計原則設(shè)計原則是設(shè)計模式為了達(dá)到其目的,所實現(xiàn)的一些準(zhǔn)則。 設(shè)計模式簡介 1.什么是設(shè)計模式 設(shè)計模式對是經(jīng)驗的總結(jié),是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。代表了最佳的實戰(zhàn)。 2.提出及GOF 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnso...
摘要:責(zé)任鏈模式一責(zé)任鏈模式定義在責(zé)任鏈模式中,許多對象由每個對象及其對下家的引用而連接起來形成一條鏈請求在這個鏈上傳遞,知道其中的某一個對象決定處理此請求角色抽象處理者角色具體處理者角色純與不純純的責(zé)任鏈模式要么處理,要么讓下家處理,而不能處理 責(zé)任鏈模式 一. 責(zé)任鏈模式 1.1 定義 在責(zé)任鏈模式中,許多對象由每個對象及其對下家的引用而連接起來形成一條鏈.請求在這個鏈上傳遞,知道其中的...
摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計模式五適配器模式適配器模式將某個對象的接生成器和協(xié)程的實現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實戰(zhàn)) 這篇文章主要介紹利用 R...
摘要:創(chuàng)建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設(shè)計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設(shè)計模式(Design pattern)是什么 設(shè)計模式是一套被反復(fù)使用、多數(shù)人知曉、經(jīng)過分類編目的代碼設(shè)計的經(jīng)驗總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會有設(shè)計模式 在軟件開發(fā)過...
閱讀 2669·2023-04-26 00:42
閱讀 2815·2021-09-24 10:34
閱讀 3827·2021-09-24 09:48
閱讀 4163·2021-09-03 10:28
閱讀 2584·2019-08-30 15:56
閱讀 2781·2019-08-30 15:55
閱讀 3272·2019-08-29 12:46
閱讀 2251·2019-08-28 17:52