如何保证一个类在内存中的对象唯一性?

我发现就算同一个答案,但提问的方式不同,

往往会对回答造成干扰或者影响,

貌似高考的时候老师也说过差不多的话,

如果这题目是问:请描述单例设计模式的实现步骤,那估计就能答出来了。

解决的问题:保证一个类在内存中的对象唯一性。

比如:多程序读取一个配置文件时,建议配置文件封装成对象。

会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,

就需要该配置文件对象在内存中是唯一的。
Runtime()方法就是单例设计模式进行设计的。

如何保证对象唯一性呢?

思想:
1,不让其他程序创建该类对象。
2,在本类中创建一个本类对象。
3,对外提供方法,让其他程序获取这个对象。

步骤:
1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象;
2,就在类中创建一个本类的对象;
3,定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。(作用:可控)

代码体现:
1,私有化构造函数;
2,创建私有并静态的本类对象;
3,定义公有并静态的方法,返回该对象。

//饿汉式
class Single{
private Single(){} //私有化构造函数。
private static Single s = new Single(); //创建私有并静态的本类对象。
public static Single getInstance(){ //定义公有并静态的方法,返回该对象。
return s;
}
}
//懒汉式:延迟加载方式。
class Single2{
private Single2(){}
private static Single2 s = null;
public static Single2 getInstance(){
if(s==null)
s = new Single2();
return s;
}
}
时间: 2024-08-01 03:17:23

如何保证一个类在内存中的对象唯一性?的相关文章

linq读书笔记2-查询内存中的对象

上次我们说到了linq对数组内容的检索,自.net2.0以后,泛型成了很常见的一种应用技术,linq对泛型的检索也提供了完善的支持 如对list类型的支持,范例如下: class Program    {        static void Main(string[] args)        {            List<Books> samplebooks = new List<Books>() {                                    

对一个程序在内存中的分析【转】

转自:http://blog.csdn.net/bullbat/article/details/7304404 bullbat  译 内存管理是操作系统的核心:它对于程序员和系统管理员都很关键.在接下来的几篇文章里面我将对内存的关键技术做谈论,但是不会远离其本质.然而概念很普通,例子多半来自32位X86系统的LINUX和Window操作系统.这第一篇文章谈论程序在内存中如何存放. 在多任务操作系统中的每一个进程运行在他自己的内存地址空间中.这个地址空间就是虚拟地址空间,虚拟地址空间在32位模式下

为什么提供私有的构造器能保证一个类只有一个实例(有待深入)

1.在我们新建一个类的对象的时候,构造器创建对象后会自动被调用,发生在其他类成员被设置为默认初始值之后,当然如果有字段初始器和初始化块的话,构造器的调用会发生在此之后.构造器的主要作用是在new将对象的引用返回之前初始化对象. 2.其访问权限是private,于是它只能被包含它的类自身所访问,而无法在类的外部调用,故而可以阻止对象的生成.所以,如果一个类只有一个私有构造器,而没有任何公有构造器,是无法生成任何对象的. 3.那么无法生成对象的带有私有构造器的类究竟有什么作用呢?这样的类在实际应用中

痴情研究java内存中的对象

前记: 几天前,在浏览网页时偶然的发现一道以前就看过很多遍的面试题,题目是:"请说出'equals'和'=='的区别",当时我觉得我还是挺懂的,在心里答了一点(比如我们都知道的:'=='比较两个引用是否指向同一个对象,'equals'比较两个对象的内容),可是总觉得心里有点虚虚的,因为这句话好像太概括了,我也无法更深入地说出一些.于是看了几篇别人的技术博客,看完后我心里自信地说,我是真的懂了:后来根据我当时的理解,就在eclipse中敲了些代码验证一下,发现有些运行的结果和我预期的又不

Runtime的实践——给一个类添加属性(关联对象)

相关文章: <Runtime的初步认识--结构体与类> <Runtime的初步认识--消息机制> 一提到给一个类添加点什么,我们有可能首先就想到类别(Category).那么我们就弄一下. 利用 Category 给现有的类添加属性 比如我们要给一个 NSArray 添加一个属性叫做NSString *name. 我们首先新建一个Objective-C文件. File: Name File Type:Category Class:NSArray 然后我们在NSArray+Name.

如何保证一个类中的实例变量不被改变

如题,如果在一个对象中的实例属性不能被改变,需要设置成不可变量的时候采用如下方法:1.将类定义成final类型 2.将实例变量定义成final类型 3.将实例变量的set方法去除 4.将在构造方法中克隆一份数据设置给实例变量 5.将在get方法中将实例变量克隆一份赋值返回给用户 public final class Demo{ private final Date start; private final Date end; public Demo(Date start,Date end){ t

关于C++ 类在内存中的存储问题

参考网站: 1.http://blog.csdn.net/fuzhongmin05/article/details/59112081 2.http://www.cnblogs.com/jerry19880126/p/3616999.html 网站1 把C++内存分为四个区:全局数据区.代码区.栈区.堆区. 全局变量.静态变量.常量放在全局数据区,成员函数和非成员函数放在代码区,函数参数.局部变量.返回值放在栈区,剩下的就放在堆区. 其中内容里面有段代码运行不通过,代码如下: 1 #include

从磁盘读取一个文件到内存中,再打印到控制台

public class work3 { public static void main(String[] args) throws IOException { getFile(); } //通过建立缓冲区和循环的方式来读取 public static void getFile() throws IOException{ //1.找目标文件 File file = new File("C:\\abcd\\12.5.txt"); //2.建立通道 FileInputStream file

java类中各成分的加载顺序跟内存中的存放位置-----转载

1 参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 2 3 一.什么时候会加载类? 4 使用到类中的内容时加载:有三种情况 5 1.创建对象:new StaticCode(); 6 2.使用类中的静态成员:StaticCode.num=9; StaticCode.show(); 7 3.在命令行中运行:java StaticCodeDemo 8 9 二.类所有内容加载顺序和内存中的存放位置: 10 利用语句进行分析. 11