设计模式学一学,各种知识百度有
首先来百度一下什么是观察者模式:
- 观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。
- 在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。
由此可见,观察者模式其实就是维持了一对多的关系,将主题信息传递给对应的观察者的过程,那对应的关系为:
首先创建主题类,包含添加观察者、删除观察者和告知观察者三个接口:
public interface Subject {
/**
* 注册观察者
*
* @param observer
*/
void register(Observer observer);
/**
* 删除观察者
*
* @param observer
*/
void delete(Observer observer);
/**
* 通知观察者
*/
void notice(String notice);
}
然后实现主题类,实现添加、删除和通知观察者的具体功能:
public class SubjectImpl implements Subject {
Set<Observer> set = new HashSet<>();
@Override
public void register(Observer observer) {
set.add(observer);
}
@Override
public void delete(Observer observer) {
set.remove(observer);
}
@Override
public void notice(String notice) {
set.forEach(observer -> {
observer.putMessage(notice);
});
}
}
主题类有了,那要通知给哪些观察者呢?让我们创建几个吧!让所有的观察者都实现相同的接口,归为一类:
public interface Observer {
/**
* 发送消息
* @param message
*/
void putMessage(String message);
}
观察者1号:
public class Observer1 implements Observer {
@Override
public void putMessage(String message) {
System.out.println(message + "observer1");
}
}
观察者2号:
public class Observer2 implements Observer {
@Override
public void putMessage(String message) {
System.out.println(message + "observer2");
}
}
观察者模式的核心观察者和主题都创建好了,让我们触发一下吧!
public class Test {
public static void main(String[] args) {
Observer observer1 = new Observer1();
Observer observer2 = new Observer2();
SubjectImpl subject = new SubjectImpl();
subject.register(observer1);
subject.register(observer2);
//通知所有注册的观察者
subject.notice("我是测试");
//删除观察者2号
subject.delete(observer2);
System.out.println("------------------- 分割线 -------------------");
subject.notice("我是测试");
}
}
查看代码的运行结果:
这就是观察者模式的简单实现,起到了一呼百应的作用,着实厉害!