Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式
一、概述
1.目标:读取properties文件改成单例模式
二、代码
1.Test.java
1 class WakenUpEvent{ 2 3 private long time; 4 private String location; 5 private Child source; 6 7 public WakenUpEvent(long time, String location, Child source) { 8 super(); 9 this.time = time; 10 this.location = location; 11 this.source = source; 12 } 13 14 public long getTime() { 15 return time; 16 } 17 18 public void setTime(long time) { 19 this.time = time; 20 } 21 22 public String getLocation() { 23 return location; 24 } 25 26 public void setLocation(String location) { 27 this.location = location; 28 } 29 30 public Child getSource() { 31 return source; 32 } 33 34 public void setSource(Child source) { 35 this.source = source; 36 } 37 38 39 } 40 41 class Child implements Runnable { 42 43 private List<WakenUpListener> wakenUpListeners = new ArrayList<WakenUpListener>(); 44 45 public void addWakenUpListener(WakenUpListener wul){ 46 wakenUpListeners.add(wul); 47 } 48 public void wakeUp(){ 49 for(int i = 0; i < wakenUpListeners.size(); i++){ 50 WakenUpListener l = wakenUpListeners.get(i); 51 l.actionToWakenUp(new WakenUpEvent(System.currentTimeMillis(), "bed", this)); 52 } 53 } 54 55 @Override 56 public void run() { 57 try { 58 Thread.sleep(3000); 59 } catch (Exception e) { 60 e.printStackTrace(); 61 } 62 wakeUp(); 63 } 64 } 65 66 67 interface WakenUpListener { 68 public void actionToWakenUp(WakenUpEvent e); 69 } 70 71 class Dad implements WakenUpListener { 72 73 public void actionToWakenUp(WakenUpEvent e) { 74 System.out.println("Fedd the child"); 75 } 76 77 } 78 79 class GrandFather implements WakenUpListener { 80 81 public void actionToWakenUp(WakenUpEvent e) { 82 System.out.println("抱孩子"); 83 } 84 85 } 86 87 class PropertiesMgr{ 88 89 private static Properties props = new Properties(); 90 91 //只加载一次,但如果properties有更新,它不会反馈 92 static { 93 try { 94 props.load(Test.class.getClassLoader().getResourceAsStream("com/tong/observer/observer.properties")); 95 } catch (Exception e) { 96 e.printStackTrace(); 97 } 98 } 99 100 public static String getProperty(String key){ 101 return props.getProperty(key); 102 } 103 } 104 public class Test { 105 106 public static void main(String[] args) { 107 108 Child c = new Child(); 109 110 String [] observers = PropertiesMgr.getProperty("observers").split(","); 111 112 for(String s : observers){ 113 try { 114 c.addWakenUpListener((WakenUpListener)Class.forName(s).newInstance()); 115 } catch (Exception e) { 116 e.printStackTrace(); 117 } 118 } 119 new Thread(c).start(); 120 } 121 }
三、运行结果
You can do anything you set your mind to, man!