关于JAVA中的singleton模式

作者&投稿:稻滢 (若有异议请与网页底部的电邮联系)
如何使用Java Singleton模式~

Singleton是一个无法实例化的对象。这种设计模式暗示,在任何时候,只能由JVM创建一个Singleton(对象)实例。
如果实例不存在,你通过创建类的新实例的方法建立一个类来执行这个模式;如果存在类的一个实例,就只会返回那个对象的一个引用。
Singleton模式的运行机制以下是Singleton模式的一个典型例子:public class Singleton { private final static Singleton INSTANCE = new Singleton(); // Private constructor suppresses generation of // a (public) default constructor private Singleton() {} public static Singleton getInstance() { return INSTANCE; } }标准的Singleton模式并不使用直接静态变量实例化进行声明——它实例化构造器中的一个静态实例变量,而不查看它是否已经存在:public class ClassicSingleton { private static ClassicSingleton INSTANCE = null; private ClassicSingleton() { // Exists only to defeat instantiation. } public static ClassicSingleton getInstance() { if(INSTANCE == null) { INSTANCE = new ClassicSingleton(); } return INSTANCE; } }Singleton类的默认构造器被设为私有,这样做可防止其它类使用new关键字直接将对象实例化。对返回Singleton对象的实例方法应用一个静态修饰符,这使得它成为一个类级方法,不创建对象即可进行访问。何时需要使用Singleton当你只需要一个类实例时,Singleton才真正有用;如果类拥有几个实例,使用Singleton就不再适用。设计系统时,你通常希望控制对象的用法,防止用户(包括你自己)复制对象或建立新实例。例如,你可以使用它创建一个连接池。每次程序需要往数据库中写入内容时才创建一个新连接的做法并不明智;相反,一个或一组已经在池中的连接就可以使用Singleton模式实例化。Singleton模式常常和工厂方法模式一同使用,创建一个系统级资源,使用这个资源的代码并不知道它的特殊类型。抽象窗口工具包(AWT)就是组合使用这两个模式的典型例子。在GUI应用程序中,对每个应用程序实例,你一般只需要一个图形元素的实例,如打印(Print)对话框或OK按钮。

是java开发中常用设计模式的一种。java的设计模式有一百多种常用的有23种。就单例模式(也叫单汉模式)来说有饿汉、懒汉之分。它们的区别是前者不考虑线程直接通过静态方法返回对象,而后者反之。

package test;

public class Singleton {
private Singleton s;
private Singleton()
{

}
public static Singleton getSigleton()
{
if(s==null)s=new Singleton();
return s;
}

}
这就是一个单例模式,我想应该不用注释了,原理就是这个类的构造方法private了,所有在外边不能调用,也就不能new Singleton();得到实例,那么
想得到实例就得调用它的静态方法getSigleton();即Singleton.getSigleton();就会返回一个Singleton的实例,注意此方法中的语句,即如果你是第一次调用这个方法那么它会给你new一个实例,以后再调用得到的都是这个实例,也就是说从始至终就只有一个Singleton的实例,这就是单例模式。

这个单例模式一般是只能创建一个实例的实现,如网络游戏里每个特定的地图,对于任意一个玩家,这个地图都是唯一的. 其特点是有一个私有的构造器和一个公开的获取实例的方法。比如:

//这是第一种,叫饿汉模式,无论是否需要,都弄一个出来

public class Singleton{
private static final Singleton st=new Singleton();
private Singleton(){

}
public static Singleton getInstance(){
if(st==null)
{
return st;

}
}
}

//这是另外一种,叫懒汉模式,你不要我就不给弄,你要了再说.

public class SingleTon{
private static SingleTon st;
private SingleTon(){

}
public static SingleTon getInstance(){
if (st==null){
st=new SingleTon();
}
return st;
}
}

二者在大多数情况没区别,但是饿汉模式是线程安全的,懒汉模式是要加同步锁的.不同步的话,在这个类的实例还没有创建的时候,多个线程同时去调用getInstance, 这时,由于没有同步锁,有可能会创建出多个实例来。
对于饿汉式,由于实例是在load class的时候创建的,所以就没有这个问题。 当然,除非2个线程采用了不同的class loader.
当然, 无论饿汉还是懒汉, 几率都不高, 但几率低不代表不会出错, 逻辑上也不对, 因此, 编程者还是应该避免。

这个单例模式一般是用做只能创建一个实例的实现。其特点是有一个私有的构造器。比如:
public class Singleton{
private static final Singleton st=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return st;
}
}
这是一种,先生成一个单例模式,然后通过Singleton.getInstance()直接实例化出该类。
public class SingleTon{
private static SingleTon st;
private SingleTon(){
}
public static SingleTon getInstance(){
if (st==null){
st=new SingleTon();
}
return st;
}
}
这是另外一种。
反正单例模式是不能new出来的,构造器私有就是只让实例化一个。

public class EagerSingleton{
private static final EagerSingletonst = new EagerSingleton();
private EagerSingleton(){}
public static EagerSingletongetInstance(){
return st;
}
}

public class LazySingleton{
private static LazySingletonst;
private LazySingleton(){}
synchronized public static LazySingleton getInstance(){
if (st==null){
st = new LazySingleton();
}
return st;
}
}

EagerSingleton比较适合JAVA

设计模式和语言无关的说~

singleton就是系统在运行期,只会有一个这个类的实例,那要实现这个该咋办?
1、禁止掉可被调用的构建方法
2、自动初始化一个实例

好了,不说了,你自己先想想上面两个怎么实现。


JAVA 如何从HTML代码中获取图片路径
String str =""String[] s=str.split("src");String[] sr = s[1].split("\\\/>");String si = sr[0].split("\\'");si[1];si[1]就是图片路径

java关键词及用法
在for循环语句中,continue语句的执行则意味着使控制传递到增量部分。参考资料:http:\/\/zhidao.baidu.com\/question\/15610056.html?si=4

学会如何用Java操作Excel文件,有一个文本文件,可以将里面内容读_百度知 ...
v+" ");\/\/ System.out.println(cell6);ws.addCell(a);ws.addCell(b);ws.addCell(c);ws.addCell(d);ws.addCell(e);ws.addCell(f);} } } \/\/list.add(si);wwb.write();wwb.close();os.close();\/\/System.out.print("h:" + h);\/\/System.out.println("j:" + j);} ...

Java中定义这样str.matches("\\\\p{Alpha}{1}")是什么意思?急,在线等回 ...
\\\\p{Alpha} 意思是 “大写或小写字母”{1} 意思是 “一个”此句 str.matches("\\\\p{Alpha}{1}") 意思是 : 匹配"一个大写或者小写字母"还有链接,你可以学习下:http:\/\/zhidao.baidu.com\/question\/24445375.html?si=3 望有帮助,加油!参考资料:http:\/\/baike.baidu.com\/view\/...

JAVA问题 请输入4位会员卡号 5678 会员卡号5678的和
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("输入4位会员卡号:");int i = scanner.nextInt();while(i < 1000 || i > 9999){System.out.println("不是四位,重新输入!");i = ...

制作学生信息(姓名,学号,成绩)管理系统(用Java)
ShowInfo si = new ShowInfo();si.show();this.showView();break;case 3:System.out.println("Bye-Bey!");System.exit(0);break;default:System.out.println("输入有误,请重新输入:");this.choseFunction();break;} } } --- import java.util.Scanner;import java.util.List;import java...

java中++ j和++ j的区别是什么?
++j出现了2次,那么先将j自增两次,为4,表达等价于:m+= 4 + 4 + 4 + 4;而不是 m+=2+3+2+3;看下这个表达式的汇编:1 inc si ;自增j 2 inc si 3 mov ax,si ;加法运算 4 add ax,si 5 add ax,si 6 add ax,si 7 add di,ax 8 inc si ;自增j 9 inc si ...

怎么写好Java(或者Java web)代码?
作为一个Java开发攻城狮(lao si ji),我可以负责任地告诉你,多看多写~首先,鉴于题主你说你是刚接触地阶段,我并不推荐你你上来就要写工业级或者企业级的代码,当下的话应该是迅速积累项目经验,快速掌握java web的开发流程为主,可以网上看看什么视频教程,有些还是能学到规范的。分享一下我的经历...

JAVA中的一个小问题
下面是从java.util包中的List接口和Iterator接口的定义中摘录的片断: public interface List<E> { void add(E x); Iterator<E> iterator();}public interface Iterator<E> { E next(); boolean hasNext();} 这些都应该是很熟悉的,除了尖括号中的部分,那是接口List和Iterator中的形式类型参数的声明(the ...

SINOW模拟账户、VNPY CTP仿真柜台异同, 如何理解VNPY“精细化回测”全新...
其底层库设计简洁,几乎能覆盖所有CTP框架,这使得它成为专业开发者理想的工具。通过精细化回测,VNPY能够精确反映策略在不同环境下的效果,助力策略优化,从A方案到B方案的子策略改进,都得益于其TICK级的回测精度。对于自编CTP程序,VNPY提供了高级功能,如与C++、Python、JAVA、C#等框架的兼容性,支持...

宜春市15750396763: java中简单的singleton模式类 谁帮忙写一个? 谢谢了? singleton是什么意思? 那位高手给我解释一下? -
陶融韦安: singleton就是单例的意思.就是说,单例模式的类只能创建一个对象,这个经常用到的,比如解析配置文件的类就是单例的.饿汉式 class Singleton { private static Singleton instance=new Singleton(); private Singleton(){} static Singleton ...

宜春市15750396763: JAVA问题:singleton是什么意思? -
陶融韦安: 是java开发中常用设计模式的一种.java的设计模式有一百多种常用的有23种.就单例模式(也叫单汉模式)来说有饿汉、懒汉之分.它们的区别是前者不考虑线程直接通过静态方法返回对象,而后者反之.

宜春市15750396763: 在java中singleton是什么模式? -
陶融韦安: 单例模式,不管你事例化多少个这个类的对象,其实都只存在一个对象.构造函数私有,就是屏蔽了构造方法,不能由构造方法来产生对象.因此你可以自己写个getInstance()..由此,就可以控制整个系统中,只存在一个此类的对象.

宜春市15750396763: java中单态模式或单例模式(Singleton)有什么意义? -
陶融韦安: 百度百科中这样回答 单态模式,即Singleton模式主要作用是保证在面向对象编程语言设计编写的程序中,一个类Class只有一个实例存在.这两个是一个意思.

宜春市15750396763: 关于JAVA中的singleton模式 -
陶融韦安: package test; public class Singleton { private Singleton s; private Singleton() { } public static Singleton getSigleton() { if(s==null)s=new Singleton(); return s; } } 这就是一个单例模式,我想应该不用注释了,原理就是这个类的构造方法private了,...

宜春市15750396763: Singleton是什么,在Java中如何实现 -
陶融韦安: 给楼主两段代码 第一种形式 public class Singleton { private Singleton(){} //在自己内部定义自己一个实例,是不是很奇怪? //注意这是private 只供内部调用 private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本...

宜春市15750396763: 如何在java中实现singleton模式 -
陶融韦安: 首先保证类中有唯一的一个构造器,而且是private的,私有的,就是除了在该类中其他地方都不可以访问的.其次有一个私有的private该类型的变量,这个变量可以在声明的的时候就实例化,也可以在构造器中调用的时候再实例化,但是,在构...

宜春市15750396763: 如何使用Java Singleton模式 -
陶融韦安: Singleton是一个无法实例化的对象.这种设计模式暗示,在任何时候,只能由JVM创建一个Singleton(对象)实例.如果实例不存在,你通过创建类的新实例的方法建立一个类来执行这个模式;如果存在类的一个实例,就只会返回那个对象的...

宜春市15750396763: Singleton设计模式 -
陶融韦安: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作. 还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向...

宜春市15750396763: 什么是Singleton -
陶融韦安: Singleton是java设计模式中的一种常用设计模式,翻译过来是单例或者单态模式 详细内容请看http://www.jdon.com/designpatterns/singleton.htm

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网