观察者模式
1代码Subject
package packagedemo; import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer1> observers = new ArrayList<Observer1>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyAllObservers(); } public void attach(Observer1 observer1){//1 observers.add((Observer1) observer1); } public void detach(Observer1 observer1){//1 observers.remove((Observer1) observer1); } public void notifyAllObservers(){ for (Observer1 observer11 : observers) { /* if(observer1 instanceof FirstObserver ) ((FirstObserver)observer1).update(); else if(observer1 instanceof SecondObserver) { ((SecondObserver)observer1).update(); } else{ }*/ ((Observer1)observer11).update(); } } }//public class
2代码Observer1
package packagedemo; public abstract class Observer1 { public abstract void update(); protected Subject subject; protected int observerstate;//protected public int getObserverstate() { return observerstate; } public void setObserverstate(int observerstate) { this.observerstate = observerstate; } }
3代码第一个子类
package packagedemo; public class FirstObserver extends Observer1{ private int $tq; private int _int1;//以字母、下划线、或者$开头 /** * * * 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合 * @param subject */ public FirstObserver(Subject subject){ this.subject = subject; this.subject.attach((Observer1) this); double num = (int)(Math.random()*100+1); this.observerstate = (int)num; //继承来的变量,受保护的变量 } @Override public void update() { System.out.println( "FirstObserver的原始状态是:"+this.getObserverstate()+",收到的状态是: " + subject.getState()); this.observerstate = subject.getState(); } }
4代码第二个子类
package packagedemo; public class SecondObserver extends Observer1{ public SecondObserver(Subject subject){ this.subject = subject; this.subject.attach((Observer1) this); double num = (int)(Math.random()*100+1); this.observerstate = (int)num; //继承来的变量,受保护的变量 } @Override public void update() { System.out.println( "SecondObserver的原始状态是:"+this.getObserverstate()+",和接收到的状态是: " + subject.getState()); //Integer.toBinaryString( subject.getState() ) ); this.observerstate = subject.getState(); } }//public class SecondObserver /** /* //创建Random类对象 Random random = new Random(); //产生随机数 int number = random.nextInt(100 - 50 + 1) + 50;//50,100+1 */
5代码
【测试类】 package packagedemo; public class Test1 { public static void main(String[] args) { Subject subject = new Subject(); new FirstObserver(subject); new SecondObserver(subject); System.out.println("第一次把subject。state改变为: 111"); subject.setState(111); System.out.println("------------------------分割线--------------------------"); System.out.println("第二次把subject。state改变为: 222"); subject.setState(222); } }
6、输出结果
第一次把subject。state改变为: 111 FirstObserver的原始状态是:90,收到的状态是: 111 SecondObserver的原始状态是:11,和接收到的状态是: 111 ------------------------分割线-------------------------- 第二次把subject。state改变为: 222 FirstObserver的原始状态是:111,收到的状态是: 222 SecondObserver的原始状态是:111,和接收到的状态是: 222

浙公网安备 33010602011771号