首页 > 学院 > 开发设计 > 正文

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

2019-11-08 02:14:07
字体:
来源:转载
供稿:网友
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 stub		obseiverss.add(o);	}	@Override	public void delete(Obseivers o) {		// TODO Auto-generated method stub		int 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 stub		notifyAllSubeject();	}	@Override	public 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);	}	@Override	public void update(float wendu, float fengji) {		// TODO Auto-generated method stub		// 更新数据		this.wendu = wendu;		this.fengji = fengji;		display();	}	@Override	public void display() {		// TODO Auto-generated method stub		System.out.println("风级是:" + fengji + "温度是:" + wendu + "!");	}}
package Obseiver;public class Test {	public static void main(String[] args) {		// TODO Auto-generated method stub		WeaterDate 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 block			e.printStackTrace();		}		weaterDate.setStatements(111, 123);		try {			Thread.sleep(1000);		} catch (InterruptedException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		weaterDate.setStatements(222, 123);	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表