`
ku_sunny
  • 浏览: 38682 次
  • 性别: 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...

    单例多例模式

    单例(Singleton)是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式的优点是能够节省系统资源,因为它避免了重复创建对象的开销。多例(Prototype)则是指每个请求都创建一个...

    设计模式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集,我会逐步上传,值得中...

    第6讲_单例模式(Singleton)

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它的核心意图是确保一个类在整个系统中只有一个实例,并提供一个全局访问点。这样的设计可以避免资源浪费,尤其在处理那些需要共享状态且频繁使用的对象时...

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

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

    设计模式(讲的最详细版本)

    这个“设计模式(讲的最详细版本)”的资源很可能包含了对23种经典GOF(Gang of Four)设计模式的深入解释,以及可能还包括了一些现代编程环境中的新设计模式。 1. **创建型模式**:这类模式主要关注对象的创建过程,...

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

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

    第五讲:单例模式

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制数据库连接、日志系统或者配置管理等,因为这些都需要一个全局共享的对象...

    C++设计模式课件26_设计模式总结.pdf

    - **单例模式**(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。 - **工厂方法模式**(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - **抽象工厂...

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    在第25讲中,他集中对整个系列进行了一次全面的总结,让我们一起来回顾和探讨这些设计模式的核心要点。 设计模式是经过实践验证的、在特定场景下解决常见问题的最佳解决方案。它们是面向对象设计的智慧结晶,通过...

Global site tag (gtag.js) - Google Analytics