1,观察者模式,可以实现模块化分离,添加与删除模块的便捷
2,被观察者抽象类
public abstract class Subject {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//链表保存观察者--添加,删除,
protected List<Observer> observers = new ArrayList<>();
public void add(Observer observer){
observers.add(observer);
}
public void remove(Observer observer){
observers.remove(observer);
}
//通知观察者
public abstract void notifyOberver(String name);
}
3,被观察者实体类1
/**
* 被观察者的实体类1
*
* @author lenovo
*
*/
public class ConcreteSubject extends Subject {
@Override
public void notifyOberver(String name) {
System.out.println("具体主题发生了变化,来自人民日报");
//实现通知所有观察者
for(Object obs : observers){
((Observer) obs).update(name);
}
}
}
4,被观察者实体类2
/**
* 被观察者的实体类2
*
* @author lenovo
*
*/
public class ConcreteSubject2 extends Subject {
@Override
public void notifyOberver(String name) {
System.out.println("具体主题发生了变化,中国日报");
//实现通知所有观察者
for(Object obs : observers){
((Observer) obs).update(name);
}
System.out.println("List: "+observers.size());
}
}
5,观察者接口
/**
* 观察者接口
*
* @author lenovo
*
*/
public interface Observer {
public void update(String name);
}
6,观察者接口实体类1
/**
* 观察者接口实体类1
* @author lenovo
*
*/
public class Observer1 implements Observer {
@Override
public void update(String name) {
System.out.println("观察者实体类1---"+name+"---更新了");
}
}
7,观察者接口实体类2
public class Observer2 implements Observer {
@Override
public void update(String name) {
System.out.println("观察者实体类2---"+name+"----更新了");
}
}
8, 测试
public class Test {
public static void main(String[] args) {
//观察者实体类对象
Observer1 bObserver1 = new Observer1();
Observer2 bObserver2 = new Observer2();
//被观察者实体类1
ConcreteSubject subject = new ConcreteSubject();
subject.add(bObserver1);
subject.add(bObserver2);
//通知
subject.notifyOberver("老王");
//被观察者实体类2
ConcreteSubject2 subject2 = new ConcreteSubject2();
subject2.add(bObserver1);
subject2.add(bObserver2);
//通知
subject2.notifyOberver("老黄");
}
}
9,输出结果