Head First_设计模式_观察者模式

来源:互联网 发布:淘宝无线端地址 编辑:程序博客网 时间:2024/05/11 03:59
package Obseiver;public interface Subject {public void register(Obseivers o);public void delete(Obseivers o);public void notifyAllSubeject();}

package Obseiver;public interface Obseivers {public void update(float wendu, float fengji);}

package Obseiver;public interface Display {public void display();}

package Obseiver;import java.util.ArrayList;public class WeaterDate implements Subject {// 建立一个用户观察者的数组private ArrayList obseiverss;// 建立三个更新的变量private float WenDu;private float FengJi;// 空的构造方法public WeaterDate() {obseiverss = new ArrayList();}public void register(Obseivers o) {// TODO Auto-generated method stubobseiverss.add(o);}@Overridepublic void delete(Obseivers o) {// TODO Auto-generated method stubint indexId = obseiverss.indexOf(o);if (indexId >= 0) {obseiverss.remove(indexId);}}// 这里有一个设置状态的方法public void setStatements(float wendu, float fengji) {this.WenDu = wendu;this.FengJi = fengji;changed();}private void changed() {// TODO Auto-generated method stubnotifyAllSubeject();}@Overridepublic void notifyAllSubeject() {// 提醒所有的观察者,更新信息!for (Object obseiver : obseiverss) {Obseivers o = (Obseivers) obseiver;o.update(WenDu, FengJi);}}}
package Obseiver;public class Obseiver_one implements Obseivers, Display {// 先声明成员变量private float wendu;private float fengji;private WeaterDate weaterDate;// 这里设置成成员变量的原因是方便后来可能的取消注册// 在构造方法里面祖册public Obseiver_one(Subject weaterDate) {weaterDate = (WeaterDate) weaterDate;weaterDate.register(this);}@Overridepublic void update(float wendu, float fengji) {// TODO Auto-generated method stub// 更新数据this.wendu = wendu;this.fengji = fengji;display();}@Overridepublic void display() {// TODO Auto-generated method stubSystem.out.println("风级是:" + fengji + "温度是:" + wendu + "!");}}

package Obseiver;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubWeaterDate weaterDate = new WeaterDate();Obseiver_one obseiver_one = new Obseiver_one(weaterDate);weaterDate.setStatements(100, 123);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}weaterDate.setStatements(111, 123);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}weaterDate.setStatements(222, 123);}}



0 0
原创粉丝点击