`
ku_sunny
  • 浏览: 37377 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我讲设计模式--单例模式

阅读更多

 

/**

 * 单例之一 ---普通单例

 * 

 * 就是考虑到 线程并发问题。。。你这个demo  只能算是 普通的 singleton。。

 * 优点:能要用的时候才实例化对象,避免不必要加载实例开销

 * 缺点:并发的时候 效率底下,同步一个方法可能造成程序执行效率下降100倍

 * 

 * 适用场景:已经有很多创建实例的情况下

 * 

 * 说明: 其实同步只有第一次执行此方法时,才真正需要同步。之后每次调用这个

 * 方法,同步就变成了累赘

 */

public class Singleton1 {

// 单列对象

private static Singleton1 uniqueInstance;

private Singleton1() {}

// 通过synchronized,迫使每个线程在进入这个方法前,要先等候别的线程

// 离开改方法,即不可能有两个线程同时进入该方法

public static synchronized Singleton1 getInstance() {

if (uniqueInstance == null) {

uniqueInstance = new Singleton1();

}

return uniqueInstance;

}

}

 

 

 

 

 

/**

 * 单列模式之二 --- 急切模式

 * 

 * 优点:不会有synchronized 同步情况下效率低下问题

 * 缺点:如果 程序加载的 实例 比较多。。加载的时候。。要在加 n 多个实例的

 * 

 * 适用场景:在创建和运行时方面的负担不太繁重,你就可能要创建这种单例

 * 

 * 说明: 依赖JVM在加载这个类时马上创建此唯一的实例。JVM保证任何线程访问

 * uniqueInstance 静态变量之前,一定先创建此单列

 */

public class Singleton2 {

// 单列对象

// 在静态初始化器中创建单件。这段代码保证了线程安全

private static Singleton2 uniqueInstance = new Singleton2();

private Singleton2() {}

public static Singleton2 getInstance() {

// 已经有实例直接使用

return uniqueInstance;

}

}

 

 

 

 

/**

 * 单列模式之三 --- 双重锁检查

 * 

 * 优点 :这种方式 解决了每次调用getInstance 效率底下的问题

 *       也不会在每次加载,实例对象问题

 * 缺点: 必须在jdk1.5或以上才能用,以下的使用关键字volatile实现

 *       会导致双重检查失效。

 * 

 * 场景:解决了上面两个的问题,单一定要确保是在jdk1.5或以上的版本使用

 */

public class Singleton3 {

// 单列对象

// volatile用在多线程中,volatile修饰的成员变量在每次被线程访问时,

// 都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,

// 强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 

private volatile static Singleton3 uniqueInstance;

private Singleton3() {}

public static Singleton3 getInstance() {

// 检查时如果不存在,就进入同步区块

// 只有第一次实例才会彻底执行这里的代码

if (uniqueInstance == null) {

synchronized (Singleton3.class) {

// 进入区块后,再检查一次。如果仍是null,才创建实例

if (uniqueInstance == null) {

uniqueInstance = new Singleton3();

}

}

}

return uniqueInstance;

}

}


/*
 * js 单例模式
 */
function Singleton() {
this.prop1 = "hello";

// 由于js中没有private设置访问权限,所以此处通过
        // 判断所调用函数的名字进行判断,防止用new 生成对象
if (Singleton.caller != Singleton.getInstance) {
throw new Error("can not new Singleton instance");
}
this.mehtod1 = function(x, y) {
return x + y;
};
}

// 静态变量
Singleton.instance_ = null;

Singleton.getInstance = function() {
if (this.instance_ == null) {
this.instance_ = new Singleton();
}
return this.instance_;
};

 

1
4
分享到:
评论
2 楼 ku_sunny 2012-09-07  
背着家走 写道
您粘贴代码的时候 怎么不适用 编辑器里的呢 ,这样以文本显示的代码看起来不大舒服,建议以后写博客的时候先预览一下


是是是,一下子忘了,谢谢你的建议。
1 楼 背着家走 2012-09-07  
您粘贴代码的时候 怎么不适用 编辑器里的呢 ,这样以文本显示的代码看起来不大舒服,建议以后写博客的时候先预览一下

相关推荐

    Java设计模式之单例模式讲解

    主要讲了单例模式的几种方法,懒汉模式、饿汉模式、静态内部类模式。着重讲解了懒汉模式下怎么实现线程安全。饿汉模式和静态内部类模式如何设置能够避免使用反射方法获取多个实列,以及实现了序列化的类如何避免创建...

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    JS 设计模式之:单例模式定义与实现方法浅析

    笔者打算通过几篇文章通俗地讲一讲常见的或者实用的设计模式。 今天先从最简单的一个入手:单例模式。 文中的示例代码会使用 ES6 语法,尽量简化不必要的细节 概念 单例模式(Singleton)属于创建型的设计模式,它...

    研磨设计模式-part2

    第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...

    研磨设计模式-part4

    第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...

    研磨设计模式-part3

    第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...

    设计模式PPT.rar

    01第一讲简单工厂模式 02第二讲工厂方法模式 03第三讲抽象工厂模式 04第四讲工厂模式在开发中的运用 05第五讲单例模式 06第六讲原型模式 07第七讲建造者模式 08第八讲装饰模式 09第九讲策略模式 10第十讲观察者模式 ...

    尚硅谷设计模式源码笔记课件.zip

    1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...

    Head First 设计模式 JAVA源码

    第五讲:单例模式 第六讲:原型模式 第七讲:建造者模式 第八讲:装饰模式 第九讲:策略模式 第十讲:观察者模式 第十一讲:享元模式 第十二讲:代理模式 第十三讲:外观模式 第十四讲:组合模式 第十五讲...

    PHP高级程序设计-模式-框架-测试

    书中首先从OOP 采用的机制—— 抽象类、接口、契约式编程开始讲起,然后介绍了静态方法、单例模式、工厂模式和PHP 6 的新特性等内容,接着介绍了测试和文档方面的内容,还介绍了标准PHP 库SPL 方面的知识以及PHP ...

    .net设计模式(上科李建忠老师讲)视频(25-2、单例)

    大约几十分钟吧,我想不会涉及版权问题吧,因为视频没有密码什么的,所以大家共享一下(若涉及版权请给以警告,本人自会撤出),相当经典的设计讲座视频教程,上海科技李建忠老师讲,共25集,我会逐步上传,值得中...

    研磨设计模式(完整带书签).part2.pdf

    第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...

    Android设计模式(详细讲解了10个Android设计模式)

    详细讲解了组合模式、观察者模式、单例模式、模板方法模式、备忘录模式、享元模式、命令模式、工厂方法模式、适配器模式 原型模式等10个Android设计模式,和CSDN上其他讲Android设计模式的文章完全不同。讲解详细,...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    PHP设计模式之单例模式入门与应用详解

    通俗来讲就是通过提供自身共享实例的访问,单例设计模式用于限制特定对象只能被创建一次,来看下这个单例模式的要点: 1.一个类只能有一个对象; 2.必须是自行创建这个类的对象; 3,要想整个系统提供这一个对象; ...

    JavaScript设计模式之单例模式实例

    《Practical Common Lisp》的作者 Peter Seibel 曾说,如果你需要一种模式,那一定是哪里出了问题。他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案。...讲 Javascript 设

    Android设计模式之单例模式解析

    今天我们要讲的是单例模式 定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 使用场景 确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源 某个类型的对象只应该有一个 ...

    js设计模式之单例模式原理与用法详解

    本文实例讲述了js设计模式之单例模式原理与用。分享给大家供大家参考,具体如下: 关于设计模式,我的理解是它是业务代码的提前解决方案。意思就是说在没有真正的业务之前,设计模式就存在了,这个是显然的。设计...

    研磨设计模式(完整带书签).part1.pdf

    第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...

    详解Ruby设计模式编程中对单例模式的运用

    主要介绍了Ruby设计模式编程中对单例模式的运用,讲到了包括对Singleton模块的使用,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics