单例模式
2018-02-28 15:50
113 查看
单例:一个类无论怎么创建,都只有一个对象
1. 在成员变量位置创建对象
2. 私有构造方法
3. 提供公共的访问方式获取对象
demo实例:
------------------------------------------------------------------------
/*饿汉式 线程安全*/
public class Single {
private static Single single = new Single();
private Single(){
}
public static Single getSingle(){
return single;
}
}
测试类:
public class Test {
public static void main(String[] args) {
Single single1 = Single.getSingle();
Single single2 = Single.getSingle();
/*创建两个实例,如果地址值一样,则证明 该类只创建一次 符合单例*/
System.out.println(single1);
System.out.println(single2);
}
}测试结果:
com.csdn.singleton.Single@1540e19d
com.csdn.singleton.Single@1540e19d
-------------------------------------------------------------------------------------
懒汉式:单线程
/*懒汉式 线程不安全,适用于单线程*/
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getSingleton(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
测试类:
懒汉式:多线程
1. 在成员变量位置创建对象
2. 私有构造方法
3. 提供公共的访问方式获取对象
demo实例:
------------------------------------------------------------------------
/*饿汉式 线程安全*/
public class Single {
private static Single single = new Single();
private Single(){
}
public static Single getSingle(){
return single;
}
}
测试类:
public class Test {
public static void main(String[] args) {
Single single1 = Single.getSingle();
Single single2 = Single.getSingle();
/*创建两个实例,如果地址值一样,则证明 该类只创建一次 符合单例*/
System.out.println(single1);
System.out.println(single2);
}
}测试结果:
com.csdn.singleton.Single@1540e19d
com.csdn.singleton.Single@1540e19d
-------------------------------------------------------------------------------------
懒汉式:单线程
/*懒汉式 线程不安全,适用于单线程*/
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getSingleton(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
测试类:
public class Test { public static void main(String[] args) { Singleton single1 = Singleton.getSingleton(); Singleton single2 = Singleton.getSingleton(); /*创建两个实例,如果地址值一样,则证明 该类只创建一次 符合单例*/ System.out.println(single1); System.out.println(single2); } } 测试结果: com.csdn.singleton.Singleton@1540e19d com.csdn.singleton.Singleton@1540e19d---------------------------------------------------------------------
懒汉式:多线程
/*懒汉模式 线程安全 适用于多线程 */ public class Singleton2 { private static Singleton2 instance; private Singleton2() { } public static Singleton2 getSingleton2(){ /*这层判断目的:当一条线程创建了对象,其他线程就不用再获取锁,再判断创建实例。提高效率*/ if(instance == null) { /*加同步锁,防止多线程访问出现创建多个实例*/ synchronized (Singleton2.class) { if (instance == null) { instance = new Singleton2(); } } } return instance; } }测试类:
public class Test { public static void main(String[] args) { Singleton2 single1 = Singleton2.getSingleton2(); Singleton2 single2 = Singleton2.getSingleton2(); /*创建两个实例,如果地址值一样,则证明 该类只创建一次 符合单例*/ System.out.println(single1); System.out.println(single2); } } 结果: com.csdn.singleton.Singleton2@1540e19d com.csdn.singleton.Singleton2@1540e19d
相关文章推荐
- 设计模式之装饰者模式
- VirtualBox的Nat模式设置及端口映射
- 实模式、保护模式、长模式
- 设计模式六大原则
- 设计模式介绍
- 桥接模式
- 建造者模式 - 设计模式 - PHP版
- 一句话评论设计模式六大原则
- Iterator 模式
- 【设计模式攻略】OO设计原则之DIP-依赖倒置原则
- 理解js对象继承的N种模式
- iOS 中各类设计模式的应用
- 编程模式23种
- java 工厂设计模式
- Linux环境Hadoop单机模式安装详解
- Android的StrictMode(严苛模式)
- 桌面虚拟化之本地模式(离线模式)大比拼 推荐
- 一起谈.NET技术,走向ASP.NET架构设计——第五章:业务层模式,原则,实践(中篇)
- 设计模式之Visitor——送礼篇
- 转:从实例谈OOP、工厂模式和重构