黑马程序员技术交流社区
标题: 单例模式 [打印本页]
作者: 沟门大杏 时间: 2014-8-4 12:36
标题: 单例模式
单例模式(Singleton)
这个模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。这样做就是为了节省内存空间,保证我们所访问到的都是同一个对象。
单例模式要求保证唯一,那么怎么样才能保证唯一性呢?对了,这就是静态变量。单例模式有以下两种形式:
第一种形式:
package reflect;
public classSingleton {
/*
* 注意这是private私有的构造方法, 只供内部调用
* 外部不能通过new的方式来生成该类的实例
*/
privateSingleton() {
}
/*
* 在自己内部定义自己一个实例,是不是很奇怪?
* 定义一个静态的实例,保证其唯一性
*/
private staticSingleton instance = newSingleton();
// 这里提供了一个供外部访问本class的静态方法,可以直接访问
public staticSingleton getInstance() {
return instance;
}
}
/**
*测试单例模式
*/
class SingRun{
public static voidmain(String[] args){
//这样的调用不被允许,因为构造方法是私有的。
//Singletonx=new Singleton();
//得到一个Singleton类实例
Singletonx=Singleton.getInstance();
//得到另一个Singleton类实例
Singletony=Singleton.getInstance();
//比较x和y的地址,结果为true。说明两次获得的是同一个对象
System.out.println(x==y);
}
}
第二种形式:
public classSingleton {
//先申明该类静态对象
private staticSingleton instance = null;
//创建一个静态访问器,获得该类实例。加上同步,表示防止两个线程同时进行对象的创建
public static synchronizedSingleton getInstance() {
//如果为空,则生成一个该类实例
if (instance == null){
instance = newSingleton();
}
return instance;
}
}
作者: zeus00456 时间: 2014-8-4 19:37
有两个地方不同意楼主
其一,单例的目的不是节省内存,如果有需要,内存你该浪费就要浪费
单例的目的是保证对象的唯一性
其二,保证唯一的手段是类内部创建实例,对外提供共有的访问方法,跟所谓的静态没有关系
构造器是私有的,访问方法时公共的,静态不是必须的。
作者: 李利威 时间: 2014-8-4 22:01
new不了对象!!只能类名修饰了
作者: 七弟 时间: 2014-8-4 22:08
路过看看
作者: 贾浩田 时间: 2014-8-6 11:59
不错,虚心学习了!!!!
作者: 叼哥 时间: 2014-8-6 13:58
看回复觉得有道理
作者: 王石 时间: 2014-8-6 17:56
学习一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |