设计模式:可更新的注册式的单实例模式[1]
来源:学生作业帮助网 编辑:作业帮 时间:2024/05/10 06:13:32 计算机应用能力考试
设计模式:可更新的注册式的单实例模式[1]计算机应用能力考试
【网络综合 - 计算机应用能力考试】
遇到这样一个应用。在系统中需要大量的配置信息,为了不每次都找数据库或者配置文件。需要一个生命周期和App一样的容器(=静态变量),但是在配置信息被修改时还需要去更新这个容器。
首先选用的是单实例模式。单实例模式中又可分为恶汉,懒汉,以及一种基于饿汉型的注册型。
个人感觉懒汉型单例模式没什么,而饿汉型的更能体现java特点。然注册行的可扩展性较强,个人感觉有点像
一个实例工厂。下面来一一列举。
恶汉:
Java代码
public class EagerSingleton {
private static final EagerSingleton m_instance = new EagerSingleton();
private EagerSingleton() {
}
public static EagerSingleton getInstance()
{
return m_instance;
}
}
懒汉:
Java代码
public class LazySingleton {
private static LazySingleton m_instance = null;
private LazySingleton() {
}
synchronized public static LazySingleton getInstance() {
if (m_instance == null) {
m_instance = new LazySingleton();
}
return m_instance;
}
}
注册型:
Java代码
public class RegSingleton {
static private HashMap m_registry = new HashMap();
static {
RegSingleton x = new RegSingleton();
m_registry.put(x.getClass().getName(), x);
}
protected RegSingleton() {
}
static public RegSingleton getInstance(String name) {
if (name == null) {
name = "name";
}
if (m_registry.get(name) == null) {
try {
m_registry.put(name, Class.forName(name).newInstance());
} catch (Exception e) {
System.out.println("Error happened.");
}
}
return (RegSingleton) (m_registry.get(name));
}
}
Java代码
public class RegSingletonChild extends RegSingleton {
private RegSingletonChild() {
}
/**
* 静态工厂方法
*/static public RegSingletonChild getInstance() {
return (RegSingletonChild) RegSingleton.getInstance("name");
}
}
由于在我们这个系统中各种配置信息较多,我个人感觉使用注册型的单实例模式比较合适。(还能应付对配置信息变化的要求)。然后就需要给我们的单实例模式添加更新的行为了。
Java代码
public class ConfigClass {
static private HashMap m_registry = new HashMap();
static {
ConfigClass x = new ConfigClass();
m_registry.put(x.getClass().getName(), x);计算机应用能力考试
遇到这样一个应用。在系统中需要大量的配置信息,为了不每次都找数据库或者配置文件。需要一个生命周期和App一样的容器(=静态变量),但是在配置信息被修改时还需要去更新这个容器。
首先选用的是单实例模式。单实例模式中又可分为恶汉,懒汉,以及一种基于饿汉型的注册型。
个人感觉懒汉型单例模式没什么,而饿汉型的更能体现java特点。然注册行的可扩展性较强,个人感觉有点像
一个实例工厂。下面来一一列举。
恶汉:
Java代码
public class EagerSingleton {
private static final EagerSingleton m_instance = new EagerSingleton();
private EagerSingleton() {
}
public static EagerSingleton getInstance()
{
return m_instance;
}
}
懒汉:
Java代码
public class LazySingleton {
private static LazySingleton m_instance = null;
private LazySingleton() {
}
synchronized public static LazySingleton getInstance() {
if (m_instance == null) {
m_instance = new LazySingleton();
}
return m_instance;
}
}
注册型:
Java代码
public class RegSingleton {
static private HashMap m_registry = new HashMap();
static {
RegSingleton x = new RegSingleton();
m_registry.put(x.getClass().getName(), x);
}
protected RegSingleton() {
}
static public RegSingleton getInstance(String name) {
if (name == null) {
name = "name";
}
if (m_registry.get(name) == null) {
try {
m_registry.put(name, Class.forName(name).newInstance());
} catch (Exception e) {
System.out.println("Error happened.");
}
}
return (RegSingleton) (m_registry.get(name));
}
}
Java代码
public class RegSingletonChild extends RegSingleton {
private RegSingletonChild() {
}
/**
* 静态工厂方法
*/static public RegSingletonChild getInstance() {
return (RegSingletonChild) RegSingleton.getInstance("name");
}
}
由于在我们这个系统中各种配置信息较多,我个人感觉使用注册型的单实例模式比较合适。(还能应付对配置信息变化的要求)。然后就需要给我们的单实例模式添加更新的行为了。
Java代码
public class ConfigClass {
static private HashMap m_registry = new HashMap();
static {
ConfigClass x = new ConfigClass();
m_registry.put(x.getClass().getName(), x);计算机应用能力考试