摘要:每一個(gè)都會(huì)檢查并且比較消息的等級(jí)與該等級(jí),判斷打印或者不打印,并且傳遞消息到下一個(gè)。設(shè)置每個(gè)的錯(cuò)誤等級(jí)以及每個(gè)的,每一個(gè)的都是當(dāng)前鏈的一部分。
責(zé)任鏈模式
責(zé)任鏈模式顧名思義,對(duì)于一個(gè)請(qǐng)求會(huì)去創(chuàng)建一條接受者鏈。這種模式會(huì)解耦一種類(lèi)型的請(qǐng)求中接受者和發(fā)送者,該模式模式屬于行為模式的一種。
在該模式當(dāng)中,一般情況下,每個(gè)接受者都會(huì)有另外一個(gè)接受者的引用,如果該接受者無(wú)法處理該請(qǐng)求,請(qǐng)求會(huì)通過(guò)引用傳入下一個(gè)接受者。
我們創(chuàng)建一個(gè)抽象類(lèi)AbstaractLogger,該類(lèi)中含有日志的記錄等級(jí)。然后我們會(huì)創(chuàng)建三個(gè)logger實(shí)現(xiàn)AbstractLogger。每一個(gè)logger都會(huì)檢查并且比較消息的等級(jí)與該logger等級(jí),判斷打印或者不打印,并且傳遞消息到下一個(gè)logger。
第一步創(chuàng)建一個(gè)抽象的Logger類(lèi)
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)建具體的類(lèi)實(shí)現(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)建不同類(lèi)型的logger。設(shè)置每個(gè)Logger的錯(cuò)誤等級(jí)以及每個(gè)logger的Next logger,每一個(gè)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."); } }第四步
校驗(yàn)輸出
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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/65907.html
摘要:設(shè)計(jì)模式目的為了代碼可重用性讓代碼更容易被他人理解保證代碼可靠性設(shè)計(jì)原則設(shè)計(jì)原則是設(shè)計(jì)模式為了達(dá)到其目的,所實(shí)現(xiàn)的一些準(zhǔn)則。 設(shè)計(jì)模式簡(jiǎn)介 1.什么是設(shè)計(jì)模式 設(shè)計(jì)模式對(duì)是經(jīng)驗(yàn)的總結(jié),是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。代表了最佳的實(shí)戰(zhàn)。 2.提出及GOF 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnso...
摘要:責(zé)任鏈模式一責(zé)任鏈模式定義在責(zé)任鏈模式中,許多對(duì)象由每個(gè)對(duì)象及其對(duì)下家的引用而連接起來(lái)形成一條鏈請(qǐng)求在這個(gè)鏈上傳遞,知道其中的某一個(gè)對(duì)象決定處理此請(qǐng)求角色抽象處理者角色具體處理者角色純與不純純的責(zé)任鏈模式要么處理,要么讓下家處理,而不能處理 責(zé)任鏈模式 一. 責(zé)任鏈模式 1.1 定義 在責(zé)任鏈模式中,許多對(duì)象由每個(gè)對(duì)象及其對(duì)下家的引用而連接起來(lái)形成一條鏈.請(qǐng)求在這個(gè)鏈上傳遞,知道其中的...
背景介紹 之前在閱讀《JavaScript設(shè)計(jì)模式和開(kāi)發(fā)實(shí)踐》這本書(shū)的時(shí)候,收貨頗豐,學(xué)習(xí)了設(shè)計(jì)模式在很多場(chǎng)景下的應(yīng)用。 但也是因?yàn)闀?shū)上場(chǎng)景過(guò)多,所以當(dāng)記不清某一種設(shè)計(jì)模式的時(shí)候,翻書(shū)溫習(xí)復(fù)雜案例的成本是相對(duì)較高的。有時(shí)候,只需要一段經(jīng)典、簡(jiǎn)潔的demo就可以迅速回顧起精髓,在快速業(yè)務(wù)開(kāi)發(fā)中,這是個(gè)比較經(jīng)濟(jì)的做法。 除此之外,當(dāng)主要工作語(yǔ)言發(fā)生變化的時(shí)候(例如:js -> python),簡(jiǎn)潔的d...
摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計(jì)模式五適配器模式適配器模式將某個(gè)對(duì)象的接生成器和協(xié)程的實(shí)現(xiàn)在這篇文章中,作者針對(duì)那些比較難以理解的概念,以一個(gè)更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見(jiàn)七種使用場(chǎng)景 (PHP 實(shí)戰(zhàn)) 這篇文章主要介紹利用 R...
摘要:創(chuàng)建型模式主要有以下五種簡(jiǎn)單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設(shè)計(jì)模式一書(shū)中將工廠模式分為兩類(lèi)工廠方法模式與抽象工廠模式。 一、 設(shè)計(jì)模式(Design pattern)是什么 設(shè)計(jì)模式是一套被反復(fù)使用、多數(shù)人知曉、經(jīng)過(guò)分類(lèi)編目的代碼設(shè)計(jì)的經(jīng)驗(yàn)總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會(huì)有設(shè)計(jì)模式 在軟件開(kāi)發(fā)過(guò)...
閱讀 2650·2023-04-26 00:42
閱讀 2799·2021-09-24 10:34
閱讀 3810·2021-09-24 09:48
閱讀 4145·2021-09-03 10:28
閱讀 2576·2019-08-30 15:56
閱讀 2771·2019-08-30 15:55
閱讀 3254·2019-08-29 12:46
閱讀 2244·2019-08-28 17:52