实现singleton的方法有两种:
方法一:公有的静态成员是一个final域,成员的声明很清楚的表达了这个类是一个singleton。
view plaincopy to clipboardprint?
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { }
public void leaveTheBuilding() {
System.out.println("Who a baby, I'm outta here!");
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.INSTANCE;
elvis.leaveTheBuilding();
}
}
方法二:提供一个公有的静态方法,而不是公有的静态final域。该方式提供了更大的灵活性,在不改变API的前提下,可以把该类改成singleton或者非singleton的。
view plaincopy to clipboardprint?
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() {
System.out.println("Who a baby, I'm outta here!");
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.getInstance();
elvis.leaveTheBuilding();
}
}
一般来说,第一种方法效率稍微高一些,然后,采用第一种方法实现singleton后,就没有改变的余地了,当你想把该类改成非singleton,显然
是不行的了。所以,除非确实确定该类是一个singleton,那就用第一个方法吧。用第2种方法的时候,假如该类实现了serializable接口,
那应该重写(override)readResolve()方法,否则再反序列化的时候是会产生一个新的实例,这与singleton相违背了!
分享到:
相关推荐
2.2. Java中基本概念 2-5 3. 二•定义,关键字和类型 3-5 3.1. 注释的三种形式 3-5 3.2. Java代码中的“;”、“{}”、“ ” 3-5 3.3. 标识符 3-5 3.4. 数据类型 3-6 3.5. 命名规则 3-6 4. 三•表达式和控制流 4-6 ...
Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中...
Laravel开发-singleton-pattern 帮助程序包来实现单例类。
一个java线程安全的单例模式:饥饿模式和延迟加载
Java面向对象(高级)-- 单例(Singleton)设计模式
perl-Class-Singleton-1.4-6.el6.noarch.rpm perl-Class-Singleton-1.4-6.el6.noarch.rpm
python库。 资源全名:django-singleton-admin-0.0.2.macosx-10.7-intel.exe
简单的单例模式举例Singleton 分为恶汉式 懒汉式
资源来自pypi官网。 资源全名:dask-actor-singleton-1.1.0.tar.gz
java Singleton单例模式 java Singleton单例模式
java singleton 不解释不解释不解释不解释
DataSource的单态模式(SingleTon)程序---马克-to-win java视频 数据源 单态模式 dataSource Singleton
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
设计模式-Singleton与Factory
adv-java-factory-singleton
2、有构造函数,构造函数没有参数(DEFINE_SINGLETON_CONSTRUCT_NO_PARAM); 3、有构造函数,构造函数有没有参数版本(DEFINE_SINGLETON_CONSTRUCT_WITH_DEFAULT); 4、有构造函数,构造函数都有参数(DEFINE_...
Java的Singleton模式代码(免资源分),你会发现Java的Singleton模式真的很有趣,原来程序还可以这样写。
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装