观察者模式

时间:2019-10-09
本文章向大家介绍观察者模式,主要包括观察者模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

观察者模式

标签(空格分隔): 设计模式


观察者模式: 当对象之间存在一对多的关系的时候, 则使用观察者模式. 比如当一个对象呗修改的时候, 则会自动通知他的依赖对象, 观察者模式属于行为模式

优点

观察者模式实现了动态联动
观察者模式实现了广播通信

缺点

如一个主题被大量观察者观察, 则通知所有的观察者的代价较高.
如果某些观察者的相应方法被阻塞, 整个通知过程也会被阻塞, 其他观察者不能及时被通知.

public interface Observer {
    void update(String info);
}
public class StudentObserver implements Observer {
    private String name;

    public StudentObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String info) {
        System.out.println(name+"收到消息"+info);
    }
}
import java.util.ArrayList;
import java.util.List;

public interface Subject{
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers(String msg);
}
import java.util.ArrayList;
import java.util.List;

public class TeacherSubject implements Subject{
    //用来存放和记录观察者
    private List<Observer> observers=new ArrayList<Observer>();
    @Override
    public void registerObserver(Observer obj) {  //增加观察者
        observers.add(obj);
    }
    @Override
    public void removeObserver(Observer obj) {  //删除观察者
        int i = observers.indexOf(obj);
        if( i >= 0 )
            observers.remove(obj);
    }
    @Override
    public void notifyObservers(String msg) {   //通知消息
        for(Observer observer : observers) {
            observer.update(msg);
        }
    }
}
public class Test {
    public static void main(String[] args){
        TeacherSubject teacher = new TeacherSubject();
        StudentObserver studentObserver1 = new StudentObserver("鸣人");
        StudentObserver studentObserver2 = new StudentObserver("佐助");
        teacher.registerObserver(studentObserver1);
        teacher.registerObserver(studentObserver2);
        teacher.notifyObservers("发作业啦");
    }
}

$flag 上一页 下一页