Java设计模式之责任链模式

本文介绍了一种使用责任链模式实现的日志处理系统,该系统通过将多个日志处理节点串联成链,实现了根据不同日志级别进行多样化的日志输出和处理,包括控制台输出、蜂鸣警告等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

package com.zhang.ReponsibilityChain;

import java.awt.Toolkit;
// 抽象基类
abstract class MyLogger {
	public final static int DEBUG = 0;
	public final static int INFO = 1;
	public final static int WARN = 2;
	public final static int ERROR = 3;
	public final static int FATAL = 4;
	public final static String[] MSG = { "[DEBUG]", "[INFO]", "[WARN]", "[ERROR]", "[FATAL]" };

	protected int l;
	private MyLogger next;
	{
		l = 0;
		next = null;
	}

	public MyLogger(int l, MyLogger next) {
		this.l = l;
		this.next = next;
	}

	public int getL() {
		return l;
	}

	public void setL(int l) {
		this.l = l;
	}

	public MyLogger getNext() {
		return next;
	}

	public void setNext(MyLogger next) {
		this.next = next;
	}

	public void output(int l, String msg) {
		write(l, msg);
		if (next != null) {
			next.output(l, msg);
		}
	}

	abstract protected void write(int l, String msg);
}
// 实现,将日志输出到控制台
class MyLoggerConsole extends MyLogger {

	public MyLoggerConsole(int l, MyLogger next) {
		super(l, next);
	}

	@Override
	protected void write(int l, String msg) {
		if (l >= this.l) {
			System.out.println(MSG[l] + msg);
		}
	}
}
// 实现,根据等级的不同发出不同次数的蜂鸣
class MyLoggerBeep extends MyLogger {

	private int beepFrequency;

	public MyLoggerBeep(int beepFrequency, int l, MyLogger next) {
		super(l, next);
		this.beepFrequency = beepFrequency;
	}

	@Override
	protected void write(int l, String msg) {
		if (l == this.l) {
			for (int i = 0; i < beepFrequency; i++) {
				Toolkit.getDefaultToolkit().beep();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

public class ReponsibilityChain {

	public static void main(String[] args) {
        // 构建整个日志的处理链条
        // 第一个节点将日志输出到控制台
        // 第二个节点,如果是"WARN"级别,发出一次"滴"
        // 第三个节点,如果是"ERROR"级别,发出三次"滴"
        // 第四个节点,如果是"FATAL"级别,发出五次"滴"
		MyLogger logger = new MyLoggerConsole(MyLogger.DEBUG, new MyLoggerBeep(1, MyLogger.WARN,
				new MyLoggerBeep(3, MyLogger.ERROR, new MyLoggerBeep(5, MyLogger.FATAL, null))));
		logger.output(Integer.parseInt(args[0]), args[1]);
	}

}

最后的链条可以根据需求任意组装。

责任链模式与与装饰器模式的实现方式完全相同,但是思路不同。装饰器模式必需先要有一个主体实现,然后再在主体上增加修饰器的实现。责任链模式无此区分,只要将多种实现串成一个链条就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值