谁能给我解释下Singleton啊... 同上 最好有例子 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 单例模式,确保某个类在系统中只存在一个实例,并且自行实例化并向这个系统提供这个实例。class A{ static final A a=new A(); private A(){ } public static A getInstance(){ return a; }}这个是饿汉单例模式 public class SingleTon{ private SingleTon instance=null; private SingleTon() { } public SingleTon getInstance() { if(this.instance==null) { return new SingleTon(); } return instance; }} Singleton是单例模式,在整个jvm中只存在唯一的实例,主要特征是构造函数是private,也就是说是私有的,不能通过new来创建实例,只能调用自身的一个函数来创建对象。具体的例子楼上几位大哥已经写的很清楚了。 在实际项目中用这种模式比较的就是Logger了,比如说将一些信息记录到文本文件中,对于一般的应用不需要使用log4j,直接用PrintWriter来写文件 package net.cnnic.epp.client.logger;import java.io.FileWriter;public class Logger{ private static FileWriter out = null; private static Logger singlon = null; public static Logger getLogger() { return getLogger(null); } public static Logger getLogger(String logfile) { if(singlon == null) singlon = new Logger(logfile); return singlon; } private Logger() { this(null); } private Logger(String filename) { if(filename == null) filename = "client_session.log"; try { out = new FileWriter("client_session.log", true); }catch(Exception e) { System.out.println("create logger error"); } } public synchronized void write(String message) { if(out == null || message == null) return ; try { out.write(message+"\r\n"); out.flush(); }catch(Exception e) { System.out.println("log error"); } }}可以参考这个 系统中你需要获得某个类的唯一实例,所有客户端对它的访问都通过一个公共的方法获得.解决方法: 创建一个类并使其定义一个私有的构造方法 再定义个私有 静态的实例变量指向自己 然后定义个公有 静态的访问方法 用于返回该类的唯一实例 Singleton分为饿汉式和懒汉式1楼的是饿汉式 2楼的是懒汉式区别在于懒汉式是线程不安全的 所以应该尽量使用饿汉式 up!以上各位把我要说的都说了,只能up了 up 单例模式,一般用在连接数据库上比较多,定义一个实例(public) Singleton模式是最简单的一种模式了,楼主可以参考一些实做,有线程安全的考虑哦。 二楼的代码错了public class SingleTon{private SingleTon instance=null;private SingleTon(){}public static synchronized SingleTon getInstance(){if(this.instance==null){return new SingleTon();}return instance;}}1.getInstance 方法要是静态的,不然永远创建不了该类的对象2.getInstance 方法是要同步的,不然多线程时有可能产生多个实例 楼上的也错了,应该是 public synchronized static SingleTon getInstance(),:) 下面是一个比较完善的Singleton模式的实现,并且避免了多线程的问题,请供参考。public class SingleTon { private volatile static SingleTon instance = null; // volatile private SingleTon() { } public static SingleTon getInstance() { if (instance == null) { synchronized (SingleTon.class) { if(instance == null) instance = new SingleTon(); } } return instance; }} Singleton是个rubbish模式(大多数情况下) 弱弱的问一下,private volatile static SingleTon instance = null;这句是什么意思,别见笑,是真的不懂 我写过一个文章:单例模式的误区 http://www.blogjava.net/crazycy/archive/2006/07/15/58268.html不妨参考一下 一段代码,问几个菜鸟问题,已经标注出来了。 JDBC执行SQL语句出错 高手來,如何在jTable中加入一個jButton 这段JAVA代码是怎么运行的,详细的说下吧! Myeclipse中连接SQL2K数据时出现的错误(图) (高难度字符串处理)如何把如下字符串:“所困多幅#112哭诉大892”中的数字892提取出来 用Url类获取网页内容时遇到的问题 关于.properties文件的问题! 刚学习玩纯java语言,没学任何API,接下来该怎么学习? 有关JAVA的Package,ClassPath的讨论,诸位看过来 怎样来判断一个程序是否执行完毕? 关于synchronized
class A{
static final A a=new A();
private A(){
}
public static A getInstance(){
return a;
}
}
这个是饿汉单例模式
{
private SingleTon instance=null;
private SingleTon()
{
}
public SingleTon getInstance()
{
if(this.instance==null)
{
return new SingleTon();
}
return instance;
}
}
具体的例子楼上几位大哥已经写的很清楚了。
{
private static FileWriter out = null;
private static Logger singlon = null; public static Logger getLogger()
{
return getLogger(null);
} public static Logger getLogger(String logfile)
{
if(singlon == null)
singlon = new Logger(logfile); return singlon; } private Logger()
{
this(null);
} private Logger(String filename)
{
if(filename == null)
filename = "client_session.log";
try
{
out = new FileWriter("client_session.log", true); }catch(Exception e)
{
System.out.println("create logger error");
}
} public synchronized void write(String message)
{
if(out == null || message == null)
return ; try
{
out.write(message+"\r\n");
out.flush();
}catch(Exception e)
{
System.out.println("log error");
}
}
}可以参考这个
解决方法:
创建一个类并使其定义一个私有的构造方法 再定义个私有 静态的实例变量指向自己 然后定义个公有 静态的访问方法 用于返回该类的唯一实例
Singleton分为饿汉式和懒汉式
1楼的是饿汉式 2楼的是懒汉式
区别在于懒汉式是线程不安全的 所以应该尽量使用饿汉式
单例模式,一般用在连接数据库上比较多,定义一个实例(public)
楼主可以参考一些实做,有线程安全的考虑哦。
public class SingleTon
{private SingleTon instance=null;
private SingleTon()
{
}
public static synchronized SingleTon getInstance()
{
if(this.instance==null)
{
return new SingleTon();
}
return instance;
}
}
1.getInstance 方法要是静态的,不然永远创建不了该类的对象
2.getInstance 方法是要同步的,不然多线程时有可能产生多个实例
private volatile static SingleTon instance = null; // volatile private SingleTon() {
} public static SingleTon getInstance() {
if (instance == null) {
synchronized (SingleTon.class) {
if(instance == null)
instance = new SingleTon();
}
}
return instance;
}
}
这句是什么意思,别见笑,是真的不懂