最近,在对以前的代码进行重构时,发现了这么一个问题,对于一个单例,在一个方法中传入该类的名字,如何根据这个名字获取该类的实例?
一般,都是根据类名.getSingletonInstance()就可以获取单例对象。
先看下面代码:
package boke.test;
/**
* 单列
*
* @since jdk1.5及其以上
* @author 毛正吉
* @version 1.0
* @date 2010.06.29
*
*/
class Singleton {
private static final Singleton singleton = new Singleton();
/**
* 私有构造
*/
private Singleton() {
}
/**
* 获得单例实例
* @return
*/
public static Singleton getInstance() {
return singleton;
}
/**
* 其他方法
*/
public void doSomething() {
System.out.println("doSomething...");
}
}
------------------------
package boke.test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 测试例子
* @author 毛正吉
*
*/
public class Client {
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws NoSuchMethodException
* @throws SecurityException
* @throws InvocationTargetException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class cls = Class.forName("boke.test.Singleton");
System.out.println(cls.getName());
Method method = cls.getDeclaredMethod("doSomething", new Class[]{});
method.invoke(Singleton.getInstance(), null);
method.invoke(cls.newInstance(), null); // 该方法有问题
}
}
很容易发现注释部分由问题,不能访问单例类,因为构造方法为private修饰。
现在,有这样一个方法,我们暂不考虑这样做有没有意义,能否通过方法中传入的类名字符串来获取该类的唯一实例呢?或者不能实现?
public Singleton getSingletonInstance(String className) {
...
return 单例对象
}
仅此想法,欢迎大家讨论哈。
分享到:
相关推荐
于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间...
于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间...
程序员们为了快速完成需求和上线而写出了最基 因为工作内容的原因,我在前后两家公司中的工作中主持和经历了十余次代码和架构的重构,下面随便说说我对重构的一些经验和想法。 关于重构 首先重构面临的背景都...
小编整理了介绍python代码重构优化的一些方法,助你一臂之力。 编写干净的 Pythonic 代码就是尽可能使其易于理解,但又简洁。所以重构代码让代码简洁易理解是很有必要的。 本文重点是想跟大家探讨为什么这些重构是好...
于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间...
模版方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 **设计思想**: 1. **开放封闭原则(Open-Closed Principle)**:软件...
作业01-代码重构 描述:社会解决方案服务公司Horiseon要求对其网站进行更新,以满足可访问性合规性要求。 在使页面可访问性符合标准并遵循“侦察规则”的同时,我使用更新的标签更新了编码的语义,清理了空格以及...
如果简化成为这样一个状态,perCDM不但可以搜索代码,而且可以同时搜索输入的文档(甚至文档就写作在其中),我想可以首先从简单的模式去实现,这是一个我需要的模式。 3、文档模式,对apose进行了初步的分析。这个...
但是重构有一个问题,就是如何保证重构后带代码实现的功能与重构前的一致,如果每次重构完成后,对此不闻不问,则会有极大的风险,如果每次重构后,都进行一边测试,则工作量会很巨大,最终可能是即使代码有重构的...
这本书的内容以及提供的资源信息,都指向了一个明确的目标:那就是提高程序员的技能,增加其对代码质量的关注,并鼓励他们在日常工作中追求更高的代码美学。通过分享优秀编码实践,书籍和相关资源可以帮助开发者建立...
开源项目“lmas-labassistant”是一个基于Go语言编写的代码重构工具库,旨在帮助开发者更高效、系统地进行代码优化和改进。这个项目的名字"LMA"可能代表“Lab Assistant”,暗示它是一个辅助实验室环境或者开发过程...
这是一些小的重构函数的集合,用于进一步增强以js2-mode开头的Emacs中JavaScript IDE的想法。 更改0.8.0 根据点的节点类型(数组,对象,函数,调用args),将expand-node-at-point和contract-node-at-point函数...
10. **Code Lab**:这个名字暗示可能是一个实验性代码的集合,或者是用于学习或测试新想法的代码库。 总的来说,这个`TalkTerminal代码备份`涵盖了Python编程、PowerShell集成、项目管理和开发环境配置等多个方面。...
因为工作内容的原因,我在前后两家公司中的工作中主持和经历了十余次代码和架构的重构,下面随便说说我对重构的一些经验和想法。关于重构 因为工作内容的原因,我在前后两家公司中的工作中主持和经历了十余次代码...
好了开始吧 重构这个其实也不是什么大动作,主要要实现的功能嘛,就是把现有的JS代码重新划分一下,解耦现有模块。然后我打算把现有的程序划分一下模块然后重新打包做一个命名空间实现use或者类似于java的Package的...
"Kalman.Studio" 是一个开发辅助工具,主要特色是它内建了一个基于T4(Text Template Transformation Toolkit)的代码生成器。这个工具旨在提高开发者的工作效率,通过自动生成代码来减少手动编写重复性工作的需求。...
《代码阅读方法与实践》是由Diomidis Spinellis编著的一本专为提升程序员代码阅读能力和技巧的书籍。在编程领域,理解并能够高效地阅读他人的代码是至关重要的,因为这不仅能帮助我们学习新的技术和设计模式,还能在...