单例模式介绍.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单例模式介绍

1???? 单例(Singleton)模式:单例模式确保某一个类只有一个?实例,而且该类只能是自己?实例化自己并向其他类公开?这个实例的对象创建?模式 ???? 采用单例模式的类:根据单例模式知道其要满足以下三点 ???? 1. 确保某一个类只有一个实例 ???? 2. 而且自己实例化 ???? 3. 并向其他类提供这个实例类 。? 2??? 确保以上三点的所采用的编程策略? ??? * 把构造方法声明为Private。确保只能由自己创建,避免外部创建实例或者被子类继承从而创造额外实例; ??? * 定义一个私有静态的该类的实例作为该类的数据域。确保一个类只能有一个实例; ??? *定义一个静态?工厂方法。外部类不能实例化一个该类的对象,所以只能用Static 的方法,提供给其他类调用,返回此单例类唯一的实例。 3、使用单例模式的条件: ???? 使用单例模式有一个必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式,反过来说,如果一个类可以有几个实例共存,那么就没有必要使用单例模式类。 4?? 单例在JAVA中的3种(一般形式)形式 主动式单例类: ??? public class ActiveSingleton { ??? ??? private static final?ActiveSingleton?m_instance = new?ActiveSingleton?(); ??? ??? //?在类加载的时候就实例化一个自己的对象? ??? ??? private?ActiveSingleton?() { ??? ??? } ???? //每次调用该工厂方法返回该实例 ??? ??? public static?ActiveSingleton?getInstance() { ??? ??????? return m_instance; ??? ??? } ??? } ? ?? java语言中单例类的一个最重要的特点是类的构造方法是私有的,从而避免外界利用构造子直接创建出任意多的实例。因为构造是私有的,因此此类不能被继承。主动式单例类在类加载的时候就实例化一个自己的对象。? 被动式单例类: ??? public class LazySingleton { ??? ??? private static LazySingleton m_instance = null; ??? ? ??? ??? private LazySingleton() { ??? ??? } ???? //静态工厂方法,?在第一次被调用时才将自己实例化? ??? ??? synchronized public static LazySingleton getInstance() { ??? ??????? if (m_instance == null) { ??? ??????????? m_instance = new LazySingleton(); ??? ??????? } ??? ??????? return m_instance; ??? ??? } ??? } ?与主动式单例类相同的是,被动式单例类的构造方法是私有的,不同的是在第一次被引用时才将自己实例化,如果加载器是静态的,那么在被动式单例类被加载时不会将自己实例化。??? 登记式单例类: ??????? 登记式单例这个单例实际上维护的是一组单例类的实例(父类 和子类),将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。? ??? public class RegSingleton { ??? ??? private static HashMap m_registry = new HashMap(); ??? ? ??? ??? static { ??? ??????? RegSingleton x = new RegSingleton(); ??? ??????? m_registry.put(x.getClass().getName(), x); ??? ??? } ??? ? ??? protected RegSingleton() { ??? ??? } ??? ? ??? ??? public static RegSingleton getInstance(String name) { ??? ??????? if (name == null) { ??? ??????????? name = RegSingleton; ??? ??????? } ??? ??????? if (m_registry.get(name) == null) { ??? ??????????? try

文档评论(0)

tangtianbao1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档