单例模式介绍

单例模式介绍

ID:40200060

大小:44.50 KB

页数:9页

时间:2019-07-25

单例模式介绍_第1页
单例模式介绍_第2页
单例模式介绍_第3页
单例模式介绍_第4页
单例模式介绍_第5页
资源描述:

《单例模式介绍》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1    单例(Singleton)模式:单例模式确保某一个类只有一个 实例,而且该类只能是自己 实例化自己并向其他类公开 这个实例的对象创建 模式    采用单例模式的类:根据单例模式知道其要满足以下三点    1.确保某一个类只有一个实例    2.而且自己实例化    3.并向其他类提供这个实例类。 2   确保以上三点的所采用的编程策略    *把构造方法声明为Private。确保只能由自己创建,避免外部创建实例或者被子类继承从而创造额外实例;   *定义一个私有静态的该类的实例作为该类的数据域。确保一个类只能有一个实例;   *定义一个静态 工厂方法。外部类不能实例化一个该类的对

2、象,所以只能用Static的方法,提供给其他类调用,返回此单例类唯一的实例。3、使用单例模式的条件:    使用单例模式有一个必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式,反过来说,如果一个类可以有几个实例共存,那么就没有必要使用单例模式类。4  单例在JAVA中的3种(一般形式)形式主动式单例类:   publicclassActiveSingleton{      privatestaticfinal ActiveSingleton m_instance=new ActiveSingleton ();      // 在类加载的时候就实例化一个自己的对象       

3、private ActiveSingleton (){      }    //每次调用该工厂方法返回该实例      publicstatic ActiveSingleton getInstance(){          returnm_instance;      }   }   java语言中单例类的一个最重要的特点是类的构造方法是私有的,从而避免外界利用构造子直接创建出任意多的实例。因为构造是私有的,因此此类不能被继承。主动式单例类在类加载的时候就实例化一个自己的对象。 被动式单例类:   publicclassLazySingleton{      privatestaticL

4、azySingletonm_instance=null;          privateLazySingleton(){      }    //静态工厂方法, 在第一次被调用时才将自己实例化       synchronizedpublicstaticLazySingletongetInstance(){          if(m_instance==null){              m_instance=newLazySingleton();          }          returnm_instance;      }   } 与主动式单例类相同的是,被动式单例类

5、的构造方法是私有的,不同的是在第一次被引用时才将自己实例化,如果加载器是静态的,那么在被动式单例类被加载时不会将自己实例化。   登记式单例类:       登记式单例这个单例实际上维护的是一组单例类的实例(父类和子类),将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。    publicclassRegSingleton{      privatestaticHashMapm_registry=newHashMap();          static{          RegSingletonx=newRegSing

6、leton();          m_registry.put(x.getClass().getName(),x);      }       protectedRegSingleton(){      }          publicstaticRegSingletongetInstance(Stringname){          if(name==null){              name="RegSingleton";          }          if(m_registry.get(name)==null){              try{       

7、           m_registry.put(name,Class.forName(name).newInstance());              }catch(Exceptione){                  System.out.println("Errorhappened.");              }          }          return(RegSingleton)(m

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。