Observer 观察者模式学习笔记之一:配置文件错误

背景与素材: 马士兵设计模式视频教程,01_Observer_视频/07_用属性文件管理Observers

程序实现功能为: Dad类,Grandfather 类监测Child类的wakeUpEvent事件。

出现的错位:java.lang.InstantiationException: com.bjsxt.DesignPatter.Observer.Dad

解决方法: 在Dad类中添加无参的构造方法即可。

在使用配置未见 observers.properties 之后,遇到这样一个问题:

package com.bjsxt.DesignPatter.Observer;


import java.io.IOException;
import java.util.Properties;


/*
 * 使用配置文件,完成程序的可扩展性
 */


public class Main {<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>Child c;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>private  void launch() {
<span style="white-space:pre">		</span>c = new Child(this);
<span style="white-space:pre">		</span>Properties props = new Properties();
<span style="white-space:pre">		</span>try {
<span style="white-space:pre">			</span>props.load(Main.class.getClassLoader().getResourceAsStream("com/bjsxt/DesignPatter/Observer/Observer.properties"));
<span style="white-space:pre">		</span>} catch (IOException e) {
<span style="white-space:pre">			</span>e.printStackTrace();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>String observers[] = props.getProperty("observers").split(",");
<span style="white-space:pre">		</span>for(String s:observers) {<span style="white-space:pre">			</span>
<span style="white-space:pre">			</span>try {
<span style="white-space:pre">				</span>WakeUpListener o = (WakeUpListener) Class.forName(s).newInstance();
<span style="white-space:pre">				</span>c.addWakeUpListner(o);
<span style="white-space:pre">			</span>} catch (InstantiationException | IllegalAccessException
<span style="white-space:pre">					</span>| ClassNotFoundException e) {
<span style="white-space:pre">				</span>e.printStackTrace();
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>(new Thread(c)).start();
<span style="white-space:pre">			</span>
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public static void main(String[] args) {<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>(new Main()).launch();
<span style="white-space:pre">	</span>}


}
		
运行以后,发现这样一个错误:java.lang.InstantiationException: com.bjsxt.DesignPatter.Observer.Dad

后在网上查阅,获得解答为:http://hellsing42.iteye.com/blog/137202


不过,问题还是遗留了: 只能使用无参的构造方法,局限性也太大了。

这里先做好记录。

你可能感兴趣的:(Observer 观察者模式学习笔记之一:配置文件错误)