彩票网站做一级代理犯法吗,中铁十六局门户网,免费网站入口在哪,湖南建筑一体化平台观察者模式,它用于建立一种对象与对象之间的依赖关系#xff0c; 一个对象发生改变将自动通知其他对象#xff0c; 其他对象将相应做出反应。在观察者模式种#xff0c;发生改变的对象称为观察目标#xff0c; 而被通知的对象称为观察者#xff0c;一个观察目标可以对应多…观察者模式,它用于建立一种对象与对象之间的依赖关系 一个对象发生改变将自动通知其他对象 其他对象将相应做出反应。在观察者模式种发生改变的对象称为观察目标 而被通知的对象称为观察者一个观察目标可以对应多个观察者 而且这些观察者之间可以没有任何相互联系可以根据需要增加和删除观察者 使得系统易于扩展。
观察者模式(Observer Pattern)定义对象之间的一种一对多依赖关系 使得每当一个对象状态发生改变时其相关依赖对象皆得到通知并被自动更新。 观察者模式的别名包括发布-订阅模式、模型-试图模式、 源-监听器模式或从属者模式。观察者模式是一种对象行为模式。 Subject(目标):目标又称为主题 它是指被观察的对象。在目标中定义了一个观察者集合 一个观察目标可以接受任意数量的观察者来观察 它提供一系列方法来增加和删除观察者对象 同时它定义了通知方法notify()。 目标类可以是接口也可以是抽象类或具体类。
ConcreteSubject(具体目标) 具体目标是目标类的子类通常它包含又经常发生改变的数据 当他的状态发生改变时向它的各个观察者发出通知 同时它还实现了在目标类中定义的抽象业务逻辑方法 (如果有的话)。如果无需扩展目标类则具体目标类可以省略。
Observer观察者 观察者将对观察目标的改变做出反应 观察者一般定义为接口改接口声明了更新数据的方法 update(),因此又称为抽象观察者。
ConcreteObserver具体观察者 在具体观察者中维护一个指向具体目标对象的引用 它存储具体观察者的有关状态 这些状态需要和具体目标的状态保持一致。 它实现了在抽象观察者Observer中定义的 update方法。通常在实现时可以调用具体目标类的 attach方法将自己添加到目标类的集合中或通过detach() 方法将自己从目标类的集合中删除。
观察模式描述了如何建立对象于对象之间的依赖关系 以及如何构造满足这种需求的系统。 观察者模式包含观察目标和观察者两类对象 一个目标可以有任意数目的与之相依赖的观察者 一旦观察目标的状态发生改变所有的观察者都将得到通知。 作为对这个通知的响应每个观察者都将监听观察目标的状态 以使其状态与目标状态同步这个交互也称为发布-订阅。 Publish-Subject。观察目标是通知的发布者。 它发出通知并不需要知道谁是它的观察者可以有任意数目的观察者订阅 它并接收通知。
public class Main{public static void main(String[] args) {/*观察者模式*/Subject subject new ConcreteSubject();Observer observer1 new ConcreteObserver1();Observer observer2 new ConcreteObserver2();subject.add(observer1);subject.add(observer2);subject.notifyObserver();}}public abstract class Subject {//定义一个观察集合用于存储所有观察集合。protected ArrayListObserver observers new ArrayListObserver();//protected ArrayList observers Observer new ArrayList();//向观察集合插入一个观察者public void add(Observer observer){observers.add(observer);}//向观察集合删除一个观察者public void detach(Observer observer){observers.remove(observer);}//声明抽象通知方法public abstract void notifyObserver();}
public interface Observer {public void update();
}public class ConcreteSubject extends Subject{Overridepublic void notifyObserver() {// 实现通知方法for(Object obs:observers){//遍历观察者集合,调用每一个观察者的响应方法((Observer)obs).update();}}
}
public class ConcreteObserver1 implements Observer{Overridepublic void update() {System.out.println(具体观察者1作出反应);}
}
public class ConcreteObserver2 implements Observer{Overridepublic void update() {System.out.println(具体观察者2作出反应);}
} 具体观察者1作出反应
具体观察者2作出反应
、