A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a80C51 中级黑马   /  2015-9-5 14:52  /  314 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1,设计模式:定义解决某一类问题最行之有效的方法。
2,单例设计模式:解决一个类在内存中只能存在一个对象。该类即为单例类。
3,设计思想及步骤
     a)禁止其他程序建立该类的对象------将构造器私有化;
     b)可以让其他程序访问该类对象,只能在本类中自定义一个对象---------创建一个本类对象;
     c)为方便其他程序对自定义对象的访问,可以对外提供一些方法---------提供方法以便获取该对象。
4,何时使用单例设计模式
     当事物存在唯一性时,即可使用单例设计模式。
5,分类:
     饿汉式
     代码如下:
  1. class SingleForAHungryMan
  2. {
  3.         private SingleForAHungryMan(){}
  4.        
  5.         private static SingleForAHungryMan s = new SingleForAHungryMan();
  6.        
  7.         public static SingleForAHungryMan getInstance()
  8.         {
  9.                 return s;
  10.         }
  11. }
复制代码

     特点:该类一进内存,就已经建立好对象。
     懒汉式:
     代码如下:
  1. class SingleForALazyMan
  2. {
  3.         private SingleForALazyMan(){}
  4.        
  5.         private static SingleForALazyMan s;
  6.        
  7.         public static SingleForALazyMan getInstance()
  8.         {
  9.        
  10.                 if(s == null)
  11.                 {
  12.                         synchronized(SingleForALazyMan.class)
  13.                         {
  14.                                 if(s==null)
  15.                                         s = new SingleForALazyMan();
  16.                         }
  17.                 }
  18.                 return s;
  19.         }
  20. }
复制代码

     特点:
     该类进内存中,对象还没有存在,只有调用对应的getInstance()方法时,才建立对象;
     缺点:
     在多线程编程时,可能会存在创建多个该实例。而为了解决这个问题,不得不引引入synchronized概念。上述方法,虽比较有效解决该问题,但代码的行数变多,空间变多。这也是空间换时间的一个例子。
     故一般建议使用饿汉式;
     附:
     测试代码如下:
  1. public class SingleTon
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 SingleForALazyMan s1 = SingleForALazyMan.getInstance();
  6.                 SingleForALazyMan s2 = SingleForALazyMan.getInstance();
  7.                
  8.                 SingleForAHungryMan s3 = SingleForAHungryMan.getInstance();
  9.                 SingleForAHungryMan s4 = SingleForAHungryMan.getInstance();

  10.                 System.out.println("Single For A Lazy Man:");
  11.                 System.out.println("s1 == s2?"+(s1.equals(s2)));
  12.                 System.out.println("s1 = "+s1);
  13.                 System.out.println("s2 = "+s2);
  14.                
  15.                 System.out.println("Single For A Hungry Man:");
  16.                 System.out.println("s3 == s4?"+(s3.equals(s4)));
  17.                 System.out.println("s3 = "+s3);
  18.                 System.out.println("s4 = "+s4);
  19.         }
  20. }
复制代码


1 个回复

倒序浏览
顶一个~~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马