- 观察者模式
一个被观察的物体对多个观察者
被观察物体添加观察者到一个列表中
循环列表调用观察的方法通知
客户端调用
Observer observer1 = new ConcreteObserver("小王");
Observer observer2 = new ConcreteObserver("小明");
Observer observer3 = new ConcreteObserver("小亮");
Subject subject = new ConcreteSubject();
subject.attach(observer1);
subject.attach(observer2);
subject.attach(observer3);
subject.notify("赶快出门做核酸~");
notify方法
for (Observer observer : observers) {
observer.update(message);
}
- 责任链模式
把任务buil打成一个责任链,依次执行
重点在于如何build成一个链,需要关注两部分代码
执行动作后的next方法
public abstract class AbstractLogger {
public static int ERROR = 1;
public static int INFO = 2;
public static int DEBUG = 3;
protected int level;
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 (Objects.nonNull(nextLogger)) {
nextLogger.logMessage(level, message);
}
}
abstract protected void write(String message);
}
buid责任链
public class ChainPatternDemo {
private static AbstractLogger buildLoggerChain() {
ErrorLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
ConsoleLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);
FileLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
errorLogger.setNextLogger(consoleLogger);
consoleLogger.setNextLogger(fileLogger);
return errorLogger;
}
public static void main(String[] args) {
AbstractLogger loggerChain = buildLoggerChain();
loggerChain.logMessage(AbstractLogger.ERROR, "error message~");
loggerChain.logMessage(AbstractLogger.INFO, "info message~");
loggerChain.logMessage(AbstractLogger.DEBUG, "debug message~");
}
}