设计模式之观察者模式

来源:互联网 发布:linux 进程状态日志 编辑:程序博客网 时间:2024/06/10 05:08

观察者模式:主要就是用一个对象的状态改变,然后通过方法去批量的更改一系列对象的状态.
/*观察者模式:定义了一种一堆多的依赖关系,让多个观察者同时监听某个主题对象, * 这个主题对象在状态发生变化是,会通知所有观察者对象,使他们能够自动更新自己. *  * 注: * 将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护现相关对象的一致性, * 我们不希望为了维持一致性而使得各类紧密耦合,这样会给维护,扩展和重用都带来不方便. *当一个对象的改变需要同时改变其他对象的时候,而且不知具体有多少的对象有待改变时,应该考虑用观察者模式, *这样可以将这两者封装在独立的对象中,使得他们各自独立的改变和复用, *总得来说,观察者所做的工作其实就是在解除耦合,狼狗和的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会 *影响另一边的变化. * */package com.zwy;import java.util.ArrayList;import java.util.List;public class ObserverTest {public static void main(String[] args) {ConcreteSubject s = new ConcreteSubject();s.Attach(new ConcreteObserver("X", s));s.Attach(new ConcreteObserver("Y", s));s.setState("更改为状态1");s.Notify();}}class Subject {protected List<Observer> observers = new ArrayList<Observer>();public void Attach(Observer observer){observers.add(observer);}public void Detach(Observer observer) {observers.remove(observer);}public void Notify() {for(Observer observer : observers){observer.update();}}}class ConcreteSubject extends Subject {protected String subjectState = ""; public String getState() {return subjectState;}public void setState(String state) {this.subjectState = state;}}abstract class  Observer {public abstract void update() ;}class ConcreteObserver extends Observer {private String name ; private ConcreteSubject subject;private String observerState;public ConcreteObserver(String name,ConcreteSubject s) {this.name = name;this.subject = s;}@Overridepublic void update() {this.observerState = subject.getState();System.out.println(this.name + "状态更改为:"+this.observerState);} }




0 0
原创粉丝点击