设计模式——单例模式
2016-07-06 15:40
225 查看
单例模式大概是接触的最早的设计模式了,也是我们日常中常用的模式之一。个人的理解,单例类就是只能有一个实例,而这个实例是它自己创建的。
单例模式有很多种表达方式,此处就写两种常用的表达方式,懒汉单例和饿汉单例。
懒汉,懒汉呢也不是不干活,知识比较懒而已,要别人拿着鞭子打他,他才会干活,那个拿鞭子的人当然就是你了。
就是说只有你调用getInstance()这个方法的时候这个类才会去实例化。
public class SingleTon {
/*
* 懒汉单例
*/
private static SingleTon instance =null;
private SingleTon(){}
//静态工厂法,线程不安全
public static SingleTon getInstance(){
if (instance==null) {
instance = new SingleTon();
}
return instance;
}
}
那么如何让线程安全呢?三种方法
1.getInstance()方法加同步,
public static
synchronized SingleTon getInstance(){
if (instance==null) {
instance = new SingleTon();
}
return instance;
}
2.双重锁
public static SingleTon getInstance(){
if (instance==null) {
synchronized (Singleton.class){
if(instance==null){
instance
= new SingleTon();
}
}
}
return instance;
}
3.静态内部类
public class SingleTon {
private static class Test(){
private static final SingleTon singleton = new SingleTon();
}
private SingleTon(){}
//静态工厂法,线程不安全
public static SingleTon getInstance(){
return Test.singleton;
}
}
饿汉,顾名思义就是很饥渴的汉子嘛,很饥渴汉子想干嘛呢,当然想立马能有一口水滋润他内心那荒芜的 沙漠。程序中同样的,就是立马就实例化这个类而不要等到你去主动触动方法来实例化。下面来看代码:
/**
* 饿汉单例,在创建的时候就已经创建好一个静态的对像供系统使用,所以天生线程安全
* @author sunShine
*
*/
public class Singleton1 {
private Singleton1(){}
private static final Singleton1 instance = new Singleton1();
//静态工厂方法
public static final Singleton1 getInstance(){
return instance;
}
}
这就是单利模式了。
单例模式有很多种表达方式,此处就写两种常用的表达方式,懒汉单例和饿汉单例。
懒汉,懒汉呢也不是不干活,知识比较懒而已,要别人拿着鞭子打他,他才会干活,那个拿鞭子的人当然就是你了。
就是说只有你调用getInstance()这个方法的时候这个类才会去实例化。
public class SingleTon {
/*
* 懒汉单例
*/
private static SingleTon instance =null;
private SingleTon(){}
//静态工厂法,线程不安全
public static SingleTon getInstance(){
if (instance==null) {
instance = new SingleTon();
}
return instance;
}
}
那么如何让线程安全呢?三种方法
1.getInstance()方法加同步,
public static
synchronized SingleTon getInstance(){
if (instance==null) {
instance = new SingleTon();
}
return instance;
}
2.双重锁
public static SingleTon getInstance(){
if (instance==null) {
synchronized (Singleton.class){
if(instance==null){
instance
= new SingleTon();
}
}
}
return instance;
}
3.静态内部类
public class SingleTon {
private static class Test(){
private static final SingleTon singleton = new SingleTon();
}
private SingleTon(){}
//静态工厂法,线程不安全
public static SingleTon getInstance(){
return Test.singleton;
}
}
饿汉,顾名思义就是很饥渴的汉子嘛,很饥渴汉子想干嘛呢,当然想立马能有一口水滋润他内心那荒芜的 沙漠。程序中同样的,就是立马就实例化这个类而不要等到你去主动触动方法来实例化。下面来看代码:
/**
* 饿汉单例,在创建的时候就已经创建好一个静态的对像供系统使用,所以天生线程安全
* @author sunShine
*
*/
public class Singleton1 {
private Singleton1(){}
private static final Singleton1 instance = new Singleton1();
//静态工厂方法
public static final Singleton1 getInstance(){
return instance;
}
}
这就是单利模式了。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用