package com.zzq.pattern.decorator;
public interface Executor {
public void execute(String msg);
}
package com.zzq.pattern.decorator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
public class BufferedLogger {
private static final int SIZE = 100;
private Logger logger = null;
private Map<String, List<String>> map = null;
public BufferedLogger(Logger logger) {
this.logger = logger;
this.map = new HashMap<String, List<String>>();
}
public void fine(String msg) {
process(msg, "fine", new Executor() {
public void execute(String msg) {
logger.fine(msg);
}
});
}
public void info(String msg) {
process(msg, "info", new Executor() {
public void execute(String msg) {
logger.info(msg);
}
});
}
public void severe(String msg) {
process(msg, "severe", new Executor() {
public void execute(String msg) {
logger.severe(msg);
}
});
}
public void warning(String msg) {
process(msg, "warning", new Executor() {
public void execute(String msg) {
logger.warning(msg);
}
});
}
private void process(String msg, String level, Executor executor) {
List<String> buffer = map.get(level);
boolean overflow = checkSize(level);
if (overflow == true) {
for (String content : buffer) {
executor.execute(content);
}
clearBuffer(level);
}
buffer.add(msg);
}
private boolean checkSize(String level) {
List<String> buffer = map.get(level);
if (buffer != null && buffer.size() < SIZE) {
return false;
}
if (buffer == null) {
map.put(level, new ArrayList<String>());
return false;
}
return true;
}
private void clearBuffer(String level) {
List<String> buffer = map.get(level);
if (buffer != null) {
buffer.clear();
}
}
}