一、概述

1.目标:读取properties文件改成单例模式

二、代码

1.Test.java

 class WakenUpEvent{

     private long time;
private String location;
private Child source; public WakenUpEvent(long time, String location, Child source) {
super();
this.time = time;
this.location = location;
this.source = source;
} public long getTime() {
return time;
} public void setTime(long time) {
this.time = time;
} public String getLocation() {
return location;
} public void setLocation(String location) {
this.location = location;
} public Child getSource() {
return source;
} public void setSource(Child source) {
this.source = source;
} } class Child implements Runnable { private List<WakenUpListener> wakenUpListeners = new ArrayList<WakenUpListener>(); public void addWakenUpListener(WakenUpListener wul){
wakenUpListeners.add(wul);
}
public void wakeUp(){
for(int i = 0; i < wakenUpListeners.size(); i++){
WakenUpListener l = wakenUpListeners.get(i);
l.actionToWakenUp(new WakenUpEvent(System.currentTimeMillis(), "bed", this));
}
} @Override
public void run() {
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
wakeUp();
}
} interface WakenUpListener {
public void actionToWakenUp(WakenUpEvent e);
} class Dad implements WakenUpListener { public void actionToWakenUp(WakenUpEvent e) {
System.out.println("Fedd the child");
} } class GrandFather implements WakenUpListener { public void actionToWakenUp(WakenUpEvent e) {
System.out.println("抱孩子");
} } class PropertiesMgr{ private static Properties props = new Properties(); //只加载一次,但如果properties有更新,它不会反馈
static {
try {
props.load(Test.class.getClassLoader().getResourceAsStream("com/tong/observer/observer.properties"));
} catch (Exception e) {
e.printStackTrace();
}
} public static String getProperty(String key){
return props.getProperty(key);
}
}
public class Test { public static void main(String[] args) { Child c = new Child(); String [] observers = PropertiesMgr.getProperty("observers").split(","); for(String s : observers){
try {
c.addWakenUpListener((WakenUpListener)Class.forName(s).newInstance());
} catch (Exception e) {
e.printStackTrace();
}
}
new Thread(c).start();
}
}

三、运行结果

Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式的更多相关文章

  1. Java-马士兵设计模式学习笔记-观察者模式-模拟Awt Button

    一.概述 Java 的Awt是 Observer模式,现用Java自己模拟awt中Button的运行机制 二.代码 1.Test.java import java.text.DateFormat; i ...

  2. Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子

    1.AWT简单例子 TestFrame.java import java.awt.Button; import java.awt.Frame; import java.awt.event.Action ...

  3. Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener

    一.概述 childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码.好的方法是封装监听者类,用addListener()方法动态添加监听者 二.代码 1.Test.java ...

  4. Java-马士兵设计模式学习笔记-观察者模式-OOD 封装event

    把小孩醒来时的具体情况封装成事件类 Test.java class WakenUpEvent{ private long time; private String location; private ...

  5. Java-马士兵设计模式学习笔记-观察者模式-OOD 线程 改进

    1.概述 由于上一个文章<Java OOD 线程>中的线程是父类主动监听childe,比较耗资源,现改进为childe类醒来后主动联系父类 2.代码 Test.java class Chi ...

  6. Java-马士兵设计模式学习笔记-观察者模式-OOD线程

    一.概述 1.情景:孩子睡觉,醒后要吃东西,用java模拟此情况 2.设计:child类,Dad类,都继承Runnable,dad线程监视child线程(缺点:因为要监视,所以耗cup资源) 二.代码 ...

  7. Java-马士兵设计模式学习笔记-代理模式-动态代理 修改成可以任意修改代理逻辑

    一.概述 1.目标:动态代理的代理逻辑可以任意修改 2.思路: (1)要把代理逻辑抽离,站在jvm的角度思考,应独立出InvocationHandler接口,并接收被代理的对象及方法作为参数invok ...

  8. Java-马士兵设计模式学习笔记-总结

    <马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory ...

  9. Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件

    一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java ...

随机推荐

  1. Json.Net使用JSON Schema验证JSON格式

    Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It s ...

  2. OC学习笔记之属性详解和易错点

    属性的概念在OC1.0中就存在,格式是定义实例变量,然后定义setter和getter方法,用点操作符操作属性 举例,类的接口部分 @interface Father : NSObject { NSI ...

  3. Java学习之IO流总结

    ---恢复内容开始--- 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块区间,在这个文件里面存放着各种各样的数据,我们想读文 ...

  4. HTML统一资源定位器

    w3c 更好的解释 在OSGi in action中安装bundle时要加文本传输协议,要不然shell判断不出来

  5. Centos6.5以下Samba服务配置

    一.简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的 ...

  6. android开发 textview根据字数长度自动调整字体大小

    需求:根据输入的值实时显示到textview中预览,但是字体大小是要自动适配的 网上有一个代码,但是在我这里不能用,注意方法:refitText  注释掉的是之前的代码 import com.cars ...

  7. SqlServer 全局变量

    1.@@ERROR 返与@@ERROR 近语句错误码局限于DML语句select语句执行现错误则返等于0错误码没错则返0通使用判断语句没执行功 -- Create Schema if not one ...

  8. 【BZOJ】【1503】 【NOI2004】郁闷的出纳员

    Splay Splay的模板题吧……妥妥的序列操作= =(好像有段时间没写过这种纯数据结构题了……) /************************************************ ...

  9. JSP页面批量选择&全选操作&选择回显

    效果如下: js验证部分: 页面body部分: 附:控制器Controller中验证批量选择条件回显:

  10. 剑指offer--面试题21--相关

    题目:设计包含min函数的栈,pop(),push(),min()的时间复杂度均为O(1) 自己所写代码如下:(写‘栈’的代码还是有些不熟练!) #include <iostream> u ...