首页 > 代码库 > Java Observer设计模式
Java Observer设计模式
1 package observer;2 //接口,用以实现小孩醒来时要做的事3 public interface IWakeupListener {4 5 public void ActionToWakeup(WakeupEvent eve);6 }
1 package observer;2 //Dad实现喂奶的动作3 public class Dad implements IWakeupListener{4 @Override5 public void ActionToWakeup(WakeupEvent e) {6 System.out.println("儿子醒了,我要去喂奶了。。。");7 }8 }
1 package observer; 2 //狗实现叫的动作 3 public class Dog implements IWakeupListener { 4 5 @Override 6 public void ActionToWakeup(WakeupEvent e) { 7 System.out.println("小主人醒了,我就汪汪叫。。。"); 8 } 9 10 }
1 package observer;2 //爷爷实现抱的动作3 public class GrandFather implements IWakeupListener{4 5 @Override6 public void ActionToWakeup(WakeupEvent e) {7 System.out.println("小孙子醒了,我要去抱抱!!!");8 }9 }
1 package observer; 2 //小孩的醒来事件:醒来时间,醒来地点,醒来的是谁 3 public class WakeupEvent { 4 private long time; 5 private String location; 6 private Child sorce; 7 8 9 public WakeupEvent(long time, String location, Child sorce) {10 super();11 this.time = time;12 this.location = location;13 this.sorce = sorce;14 }15 public long getTime() {16 return time;17 }18 public void setTime(long time) {19 this.time = time;20 }21 public String getLocation() {22 return location;23 }24 public void setLocation(String location) {25 this.location = location;26 }27 public Child getSorce() {28 return sorce;29 }30 public void setSorce(Child sorce) {31 this.sorce = sorce;32 }33 }
1 package observer; 2 //小孩 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 public class Child implements Runnable{ 8 9 private List<IWakeupListener> listener = new ArrayList<IWakeupListener>();10 11 public void addWakeupListener(IWakeupListener l)12 {13 listener.add(l);14 }15 16 //-------------测试17 @Override18 public void run() {19 try {20 Thread.sleep(3000);21 } catch (InterruptedException e) {22 // TODO Auto-generated catch block23 e.printStackTrace();24 }25 wakeup();26 }27 28 private void wakeup() {29 // Iterator<IWakeupListener> iter = listener.iterator();30 // while (iter.hasNext()) {31 // IWakeupListener l = iter.next();32 // }33 34 for(Iterator<IWakeupListener> iter = listener.iterator();iter.hasNext();)35 {36 IWakeupListener l = iter.next();37 l.ActionToWakeup(new WakeupEvent(System.currentTimeMillis(), "home", this));38 }39 40 }41 //-------------测试end42 43 }
配置文件:observer.properties,放在asset/config文件夹下
1 observers=observer.Dad;observer.GrandFather;observer.Dog
1 package observer; 2 //解析.properties 3 import java.io.IOException; 4 import java.util.Properties; 5 6 public class PropertyProxy { 7 8 private Properties properties = new Properties(); 9 private static PropertyProxy instance=null;10 public static PropertyProxy Instance()11 {12 if(instance==null)13 {14 instance = new PropertyProxy();15 }16 return instance;17 }18 19 public String getProperty(String path,String key)20 {21 try {22 properties.load(PropertyProxy.class.getClassLoader().getResourceAsStream(path));23 } catch (IOException e) {24 // TODO Auto-generated catch block25 e.printStackTrace();26 }27 28 return properties.getProperty(key);29 }30 }
1 package observer; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 public class Child implements Runnable{ 8 9 private List<IWakeupListener> listener = new ArrayList<IWakeupListener>();10 11 public void addWakeupListener(IWakeupListener l)12 {13 listener.add(l);14 }15 16 //-------------测试17 @Override18 public void run() {19 try {20 Thread.sleep(3000);21 } catch (InterruptedException e) {22 // TODO Auto-generated catch block23 e.printStackTrace();24 }25 wakeup();26 }27 28 private void wakeup() {29 // Iterator<IWakeupListener> iter = listener.iterator();30 // while (iter.hasNext()) {31 // IWakeupListener l = iter.next();32 // }33 34 for(Iterator<IWakeupListener> iter = listener.iterator();iter.hasNext();)35 {36 IWakeupListener l = iter.next();37 l.ActionToWakeup(new WakeupEvent(System.currentTimeMillis(), "home", this));38 }39 40 }41 //-------------测试end42 43 }
1 package observer; 2 3 import oracle.net.aso.c; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 Child child = new Child(); 9 10 String[] observerArr = PropertyProxy.Instance().getProperty("asset/config/observer.properties", "observers").split(";");11 12 for(String className: observerArr)13 {14 IWakeupListener l = null;15 try {16 l = (IWakeupListener)(Class.forName(className).newInstance());17 } catch (InstantiationException | IllegalAccessException18 | ClassNotFoundException e) {19 e.printStackTrace();20 }21 child.addWakeupListener(l);22 }23 24 new Thread(child).start();25 }26 }
Java Observer设计模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。