`
lphua123
  • 浏览: 7116 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

单例模式(singleton) 小结

阅读更多

单例模式类规则:

  • 这个类只有一个实例。单例模式的核心。
  • 这个类自已负责创建这个实例。类自己负责创建实例,才能保证只有一个实例。
  • 这个实例是非私有的。如果实例私有,这个类不能被任何类使用,这是没有意义的。

单例模式类实现规则:

  • 构造方法私有。
  • 有一个能持有自身实例的私有静态成员变量。
  • 有一个能提供自身实例的公有静态成员方法。

为什么要使用单例模式:

  • 从业务的角度来看,有些核心对象在系统中必须只有一个实例,比如员工可以有多个,经理只有一个。
  • 从技术的角度来看,单例类实例只创建一次,对一些大类反复创建实例很耗资源,使用单例模式可以节省资源。

单例模式分类:

饿汉式: 类加载时创建实例。

懒汉式: 类被调用时创建实例。

比较:

饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。

懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。 推荐使用第一种

懒汉式没有加私有的构造函数
从实现方式来讲他们最大的区别就是懒汉式是延时加载,
他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,
使用的场合根据具体环境和个人习惯吧.

饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例(上面有个朋友写错了)、所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。
懒汉式的优点是延时加载、缺点是应该用同步(想改进的话现在还是不可能,比如double-check)、其实也可以不用同步、看你的需求了,多创建一两个无引用的废对象其实也没什么大不了。

 

 

 /**/   /*
 * 饿汉是单例类 Hungry Singleton
 @author ZhangPu
 Feb 22, 2007 7:34:50 PM
  */

public   class  HungrySingleton  {
     /** */ /**  声明时候初始化  */
     private   static  HungrySingleton hungrySingleton  =   new  HungrySingleton();
     /** */ /**
     * 私有构造
      */
     private  HungrySingleton() {}
    
     /** */ /**
     * 单例方法
     *  @return
      */
     public   static  HungrySingleton getInstance() {
         return  hungrySingleton;
    }
    
     /** */ /**
     * 示例业务方法
      */
     public   void  demoMethod() {
         // do something
    }
} 
 
 /**/   /*
 * 懒汉是单例类 Lazy Singleton
 @author ZhangPu
 Feb 22, 2007 7:41:26 PM
  */

public   class  LazySingleton  {

     /** */ /**  声明单例自身实例变量  */
     private   static  LazySingleton lazySingleton  =   null ;
     /** */ /**
     * 私有构造
      */
     private  LazySingleton() {}
    
     /** */ /**
     * 单例方法
     *  @return
      */
     public   static  LazySingleton getInstance() {
         if (lazySingleton  ==   null ) {
            lazySingleton  =   new  LazySingleton();
        }
         return  lazySingleton;
    }
    
     /** */ /**
     * 示例业务方法
      */
     public   void  demoMethod() {
         // do something
    }
} 

 

 

分享到:
评论

相关推荐

    2.单例模式(Singleton)1

    1. 定义 2. 生活场景 3. 应用场景 4. 模式的优点和缺点 5. 饿汉式和懒汉式 6. 实现案例 7. 案例小结 1. 定义 2. 生活场景 3. 应用

    Android中单例模式的一些坑小结

    单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。” 而我对单例的理解是,在可控的范围内充当全局变量的作用,就相当于C语言中一个全局...

    Delphi模式编程第一分卷

    第7章 单例模式(Singleton) 7.1 模式解说 7.2 结构和用法 7.2.1 模式结构 7.2.2 代码模板 7.2.3 Delphi对象构造机制与单例模式 7.3 范例与实践 7.3.1 一个共享数据库连接的单例模式范例 7.3.2 范例小结 ...

    Delphi模式编程第二分卷

    第7章 单例模式(Singleton) 7.1 模式解说 7.2 结构和用法 7.2.1 模式结构 7.2.2 代码模板 7.2.3 Delphi对象构造机制与单例模式 7.3 范例与实践 7.3.1 一个共享数据库连接的单例模式范例 7.3.2 ...

    C#23种设计模式_示例源代码及PDF

    单例模式: 而且自行实例化并向整个系统提供这个实 单例模式 单例模式确保某一个类只有一个实例, 例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 结构型模式 6、ADAPTER —在朋友聚会上碰到...

    php网络开发完全手册

    5.7.2 单例模式(Singleton Pattern) 81 5.7.3 工厂模式(Factory Pattern) 83 5.8 接口与抽象类 86 5.8.1 接口的定义 86 5.8.2 单一接口的实现 87 5.8.3 多重接口的实现 87 5.8.4 抽象类 88 5.9 小结 90 第6章 ...

    spring.doc

    小结: 47 面向接口编程: 47 4 面向切面编程 52 4.1 代理模式 52 代理模式拓展: 52 4.1.1 JDK动态代理 58 JDK动态代理拓展: 59 4.1.2 CGLIB做代理 66 CGLIB动态代理拓展: 68 4.1.3 Spring的动态代理 71 4.2 AOP...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    2.4 本章小结 15 第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18...

    Java范例开发大全 (源程序)

     实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158 同学聚会(工厂方法模式) 244  实例159 图书展(抽象工厂模式) 246  实例160 汽车适配器(Adapter适配器模式) 248  8.4 ...

    java范例开发大全(pdf&源码)

    实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式) 248 8.4 垃圾回收 250 实例...

    java范例开发大全源代码

     实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158 同学聚会(工厂方法模式) 244  实例159 图书展(抽象工厂模式) 246  实例160 汽车适配器(Adapter适配器模式) 248 ...

    java范例开发大全

    实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式) 248 8.4 垃圾回收 250 实例...

    Java范例开发大全(全书源程序)

    实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式) 248 8.4 垃圾回收 ...

Global site tag (gtag.js) - Google Analytics