`
luotuoass
  • 浏览: 635027 次
文章分类
社区版块
存档分类
最新评论

设计模式之Singleton(单态模式)

 
阅读更多

源地址:我的技术博客http://linger.devhub.com/blog/700994-singleton/

设计模式之Singleton(单态模式)

所谓的单态模式,即表示一个类只有一个实例。很多时候我们只需要实例化一个对象,比如做界面时,点击一个button会弹出一个对话框,如果不是单态模式,万一由于响应比较慢导致用户点击了很多次,结果不是弹出很多对话框,这时如果对话框是单态模式就不同了。(关于singleton的好处《大话设计模式》中有这么一段话,)。

Singleton的实现方法有两种,都是利用静态变量实现的,当然singleton实现的前提是构造函数是私有的。

方法一是lazy instantiation,当需要用到实例时才实例化:

public static Singleton instance() {

if(uniqueInstance == null) uniqueInstance = new Singleton();

return uniqueInstance;

}

当然上面的实现有个问题,就是在多线程下,有可能会实例化不止一个对象。最好就用到线程同步,具体百度百科有(http://baike.baidu.com/view/1035727.htm)。不过用到线程同步必然会导致浪费资源。

方法二是eager instantiation:

private static Singleton uniqueInstance = new Singleton();

public static Singleton instance() {

return uniqueInstance;

}

.net中这么解释的,在类被加载时就实例化了。

还有一个值得注意的问题,就是当该类有子类时,子类也需要单态模式,怎么处理,也是有两种方法。

方法一,在父类添加一个返回子类实例的函数:

public static MazeFactory instance() {

if (uniqueInstance == null) return instance("enchanted");

else return uniqueInstance;

}

// Create the instance using the specified String name.

public static MazeFactory instance(String name) {

if(uniqueInstance == null)

if (name.equals("enchanted"))

uniqueInstance = new EnchantedMazeFactory();

else if (name.equals("agent"))

uniqueInstance = new AgentMazeFactory();

return uniqueInstance;

}

方法二,在各子类中添加自己的返回实例的函数:

public class EnchantedMazeFactory extends MazeFactory {

// Return a reference to the single instance.

public static MazeFactory instance() {

if(uniqueInstance == null)

uniqueInstance = new EnchantedMazeFactory();

return uniqueInstance;

}


分享到:
评论

相关推荐

    设计模式之Singleton(单态)

    设计模式之Singleton(单态)

    设计模式之Singleton

    设计模式之Singleton(单态

    JAVA设计模式chm文档

    设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享...

    设计模式文档 chm

    设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享...

    Java设计模式之单态模式(Singleton模式)介绍

    主要介绍了Java设计模式之单态模式(Singleton模式)介绍,本文讲解了如何使用单例模式、使用单例模式注意事项等内容,需要的朋友可以参考下

    GoF 23种设计模式的详解与应用

    创建模式:设计模式之Factory,设计模式之Prototype(原型),设计模式之Builder,设计模式之Singleton(单态). 结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite...

    JAVA设计模式(单态模式和简单工厂模式)

    单态模式的定义: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在项目的很多地方都会用到它,比如说数据库的链接。 使用Singleton的好处还在于可以节省内存,因为它限制了实例...

    单态模式的设计和应用

    单态模式的设计和应用--设计模式之Singleton(单态)

    设计模式整理(很全)

    创建模式 设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁....

    JAVA设计模式23种

    设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new一样频繁. 设计模式...

    网络编程、常用设计模式

    详细的jsp网络编程、常用设计模式! 前言 3 第一部分:网络编程 4 一、了解URL 4 二、读取URL中的资源 4 1、URL构造方法: 5 2、读取资源 5 三、INETADDRESS类 5 四、SOCKET类 6 1、Socket套接字连接 6 2、Socket...

    自己整理的java设计模式模式(袖珍版的哦)

    为了更好的网络共享 本人发布的资源一律免费 如有哪个收费了 请告知! 压缩包 包括常用的几种模式: 设计模式的原则 设计模式袖珍版之-Decorator(油漆工) ...设计模式袖珍版之-Singleton(单态) 设计模式袖珍版之-Visitor

    java设计模式教程+源代码

    Singleton ( 单态模式 ) Builder ( 建造者模式 ) Prototype ( 原型模式 ) Adapter ( 适配器模式 ) Bridge ( 桥接模式 ) Composite ( 组合模式 ) Decorator ( 装饰模式 ) Facade ( 外观模式 ) Flyweight ( 享...

    23种java设计模式

    Factory(工厂模式)、Singleton(单态)、Builder(建造者模式)、Prototype(原型模式)、工厂方法模式。2、结构模式:Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器...

    源码:阎宏设计模式光盘

    com.javapatterns.javaio 专题:设计模式在Java I/O中的应用 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.liskov 里氏代换原则 com.javapatterns.lod 迪米特法则 ...

    二十三种设计模式【PDF版】

    设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

    Java的23种设计模式疯狂Java总结.doc

    设计模式3 1.1 创立型模式4 1.1.1 工厂方法4 1.1.2 抽象工厂6 1.1.3 建造者模式10 1.1.4 单态模式13 1.1.5 原型模式15 1.2 构造型模式17 1.2.1 适配器模式17 1.2.2 桥接模式19 1.2.3 组合模式23 1.2.4 装饰模式26 ...

    Java中几个常用设计模式

    1.单例模式(有的书上说叫单态模式其实都一样)  该模式主要目的是使内存中保持1个对象。看下面的例子:  package org.sp.singleton;  //方法一  public class Singleton {  //将自身的实例对象设置为一个...

    java 企业设计模式(框架设计)

    Factory Singleton(单态) Builder Prototype(原型) Flyweight Bridge Decorator(油漆工) Composite(组合) Adapter(适配器) Proxy(代理) Facade(外观 总管 Manager) Visitor Observer

    java 基本设计模式

    Factory Singleton(单态) Builder Prototype(原型) Flyweight Bridge Decorator(油漆工) Composite(组合) Adapter(适配器) Proxy(代理) Facade(外观 总管 Manager) Visitor Observer

Global site tag (gtag.js) - Google Analytics