设计模式---单例模式
2016-03-05 11:56
190 查看
# 单例模式
#单例模式-->从始至终 只产生一个示例
#代码
public class Single {
private static Single instance;
private Single(){
}
public Single getInstance(){
if(instance!=null){
instance = new Single();
}
return instance;
}
}
# Static 修饰变量表示是静态变量
被 static修饰 表示是静态变量 没有表示是实例变量 二者的区别 在于 静态变量 在 加载类的时候就会分配内存 可以用类名直接访问 实例变量 会在类实例化的时候 进行内存分配 会在内存中有多个备份 互不影响 静态变量 只会在内存中有一个
实例变量 只有在用的时候 才会实例化 但是静态变量 只要加载类 就会实例化 但是只会有一个
要点 1 。 静态全局变量 instance
2. 构造方法 私有化 private 这样 非子类都不能访问
3. public 的getInstance方法 来实例化对象
# 如果多个线程 同时访问 有可能实例化多个对象出来
比如 线程一 运行到 if判断的时候 sleep一秒钟 线程二 运行过来if 这是 实例已经被创建了 但是 线程一 仍然 任务 instance 是null 于是又创建了新 的一个
#解决办法 使用 synchronize 同步代码块 当 线程一 运行该部分代码时 线程二 会等待他 运行结束 在运行 该部分代码
**************************完美解决方式*********************************
*/
/**
* 使用静态内部类来实现 静态内部类只能访问外部类的静态成员 静态内部类不能new
* @author arthas
*
*/
public class Single {
//1 一个私有的构造方法 保证 获取该实例的时候 不会通过此方法
private Single() {
}
// 2 一个公共的静态内部类 里面只有一个静态的最终类 实例对象 instance
public static class Singleton1{
private static final Single instance = new Single();
}
//一个公共的构造方法 得到instance实例 静态变量可以通过 类名点点的方式直接获取
public static Single getInstance(){
return Singleton1.instance;
}
}
#单例模式-->从始至终 只产生一个示例
#代码
public class Single {
private static Single instance;
private Single(){
}
public Single getInstance(){
if(instance!=null){
instance = new Single();
}
return instance;
}
}
# Static 修饰变量表示是静态变量
被 static修饰 表示是静态变量 没有表示是实例变量 二者的区别 在于 静态变量 在 加载类的时候就会分配内存 可以用类名直接访问 实例变量 会在类实例化的时候 进行内存分配 会在内存中有多个备份 互不影响 静态变量 只会在内存中有一个
实例变量 只有在用的时候 才会实例化 但是静态变量 只要加载类 就会实例化 但是只会有一个
要点 1 。 静态全局变量 instance
2. 构造方法 私有化 private 这样 非子类都不能访问
3. public 的getInstance方法 来实例化对象
# 如果多个线程 同时访问 有可能实例化多个对象出来
比如 线程一 运行到 if判断的时候 sleep一秒钟 线程二 运行过来if 这是 实例已经被创建了 但是 线程一 仍然 任务 instance 是null 于是又创建了新 的一个
#解决办法 使用 synchronize 同步代码块 当 线程一 运行该部分代码时 线程二 会等待他 运行结束 在运行 该部分代码
**************************完美解决方式*********************************
*/
/**
* 使用静态内部类来实现 静态内部类只能访问外部类的静态成员 静态内部类不能new
* @author arthas
*
*/
public class Single {
//1 一个私有的构造方法 保证 获取该实例的时候 不会通过此方法
private Single() {
}
// 2 一个公共的静态内部类 里面只有一个静态的最终类 实例对象 instance
public static class Singleton1{
private static final Single instance = new Single();
}
//一个公共的构造方法 得到instance实例 静态变量可以通过 类名点点的方式直接获取
public static Single getInstance(){
return Singleton1.instance;
}
}
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用
- 举例解析设计模式中的工厂方法模式在C++编程中的运用
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则
- 解析C#设计模式编程中的装饰者模式