一、概述

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 }

三、运行结果

转载于:https://www.cnblogs.com/shamgod/p/4589028.html

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

  1. 马士兵Hibernate学习笔记

    马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...

  2. Java学习笔记——JDBC读取properties属性文件

    Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...

  3. 学习笔记_ncl_读取nc文件中的变量_制作nc文件的方法

    由于生成的文件较大较多,在超算上不方便使用matlab,只好向ncl势力低头 目的是在超算上对相关结果进行第一步简单处理后,下载到pc上再进行其他处理 ncl新手 如果是从已有的nc文件中读取变量到新 ...

  4. python学习笔记:读取xyz文件

    在药学的Ai研发过程中,经常要制作清洗文件和处理各种文件格式.利用openBabel这样功能能够大大减轻转换过程的麻烦.然而偶然也需要应对一下场景下处理xyz文件抽取相关的坐标体系去计算小分子之间的作 ...

  5. 设计模式学习笔记-观察者模式(转)

    http://www.cnblogs.com/wangjq/archive/2012/07/12/2587966.html 1. 概述 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系, ...

  6. 设计模式学习笔记-观察者模式

    1. 概述 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 2. ...

  7. Java-马士兵设计模式学习笔记-策略模式-模拟Comparable接口

    一.情况 1.目标:要在专门用于排序数据的DataSorter.java中实现对所有A类,B类,C类,D类等等的排序 2.初步想法:DataSorter.java的代码如下 public class ...

  8. [云炬Python学习笔记] Python读取指定文件夹下的文件

    1 # -*- coding: utf-8 -*-2 import csv3 import os4 import pandas as pd5 #提取文件夹下的地址+文件名,源文件设定排序规则6 def ...

  9. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

最新文章

  1. Boost:基于Boost的聊天的应用程序
  2. Mvc5 控制器,视图简单说明
  3. 输入学生成绩,并按升序排列 Ascending.java
  4. mscoco数据集_重磅!小目标检测的数据增广秘籍
  5. python设置tk退出_退出tkinter gui
  6. Python学习入门基础教程(learning Python)--5.2 Python读文件基础
  7. LaTeX 长度和单位 Lengths Units
  8. 微信3.1.0.67逆向-微信3.1.0.67HOOK接口(WeChatHelper3.1.0.67.dll)使用说明
  9. 2022年开始学习Delphi并成为Delphi程序员的5个重要原因
  10. MySQL 优化:Explain 执行计划详解
  11. 你觉得八部金刚功、八段锦、太极拳这种中国传统养生功法有效吗,请从科学与实践的角度详细阐述...
  12. oppo reno5什么时候上市
  13. 【视频格式】m3u8格式视频下载
  14. 通过限制挖矿病毒cpu占用率来解决挖矿病毒,简单奏效
  15. 第三次作业 软件产品同质化问题
  16. vue下载文件并重命名
  17. 安装一台计算机的操作系统,一台电脑可以这样来同时安装XP和WIN7两种操作系统...
  18. 2d有限元计算机仿真,超精密单点金刚石车削加工有限元仿真
  19. 公司不是我的家,那我为什么还要加班?兼说如何在公司高效提升自己的方法
  20. db2 编目命令\删除命令

热门文章

  1. shell输出没有换行符
  2. hive清空外表数据
  3. springboot抑制log中的info信息
  4. logs is not in the form of topic-partition or topic-partition.uniqueId-delete
  5. sqoop把mysql数据导入hive
  6. http://127.0.0.1:8000/accounts/login/总是重定向到http://127.0.0.1:8000/accounts/profile/并且报告404
  7. 市面上的hadoop书籍调研
  8. hexo 修改yelee文章标题字体颜色
  9. winowsformshost 的构造函数执行符合指定的绑定约束的_C# 应该允许为 struct 定义无参构造函数...
  10. 方差为什么用平方不用绝对值_为什么炖鸡汤,人们喜欢用母鸡而不用公鸡?原来差别这么大!...