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 { // 建立一個用戶觀察者的數(shù)組 PRivate ArrayList obseiverss; // 建立三個更新的變量 private float WenDu; private float FengJi; // 空的構(gòu)造方法 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); } } // 這里有一個設(shè)置狀態(tài)的方法 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;// 這里設(shè)置成成員變量的原因是方便后來可能的取消注冊 // 在構(gòu)造方法里面祖冊 public Obseiver_one(Subject weaterDate) { weaterDate = (WeaterDate) weaterDate; weaterDate.register(this); } @Override public void update(float wendu, float fengji) { // TODO Auto-generated method stub // 更新數(shù)據(jù) this.wendu = wendu; this.fengji = fengji; display(); } @Override public void display() { // TODO Auto-generated method stub System.out.println("風(fēng)級是:" + 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); }}
新聞熱點
疑難解答