1,设计模式:定义解决某一类问题最行之有效的方法。
2,单例设计模式:解决一个类在内存中只能存在一个对象。该类即为单例类。
3,设计思想及步骤
a)禁止其他程序建立该类的对象------将构造器私有化;
b)可以让其他程序访问该类对象,只能在本类中自定义一个对象---------创建一个本类对象;
c)为方便其他程序对自定义对象的访问,可以对外提供一些方法---------提供方法以便获取该对象。
4,何时使用单例设计模式
当事物存在唯一性时,即可使用单例设计模式。
5,分类:
饿汉式
代码如下:
- class SingleForAHungryMan
- {
- private SingleForAHungryMan(){}
-
- private static SingleForAHungryMan s = new SingleForAHungryMan();
-
- public static SingleForAHungryMan getInstance()
- {
- return s;
- }
- }
复制代码
特点:该类一进内存,就已经建立好对象。
懒汉式:
代码如下:
- class SingleForALazyMan
- {
- private SingleForALazyMan(){}
-
- private static SingleForALazyMan s;
-
- public static SingleForALazyMan getInstance()
- {
-
- if(s == null)
- {
- synchronized(SingleForALazyMan.class)
- {
- if(s==null)
- s = new SingleForALazyMan();
- }
- }
- return s;
- }
- }
复制代码
特点:
该类进内存中,对象还没有存在,只有调用对应的getInstance()方法时,才建立对象;
缺点:
在多线程编程时,可能会存在创建多个该实例。而为了解决这个问题,不得不引引入synchronized概念。上述方法,虽比较有效解决该问题,但代码的行数变多,空间变多。这也是空间换时间的一个例子。
故一般建议使用饿汉式;
附:
测试代码如下:
- public class SingleTon
- {
- public static void main(String[] args)
- {
- SingleForALazyMan s1 = SingleForALazyMan.getInstance();
- SingleForALazyMan s2 = SingleForALazyMan.getInstance();
-
- SingleForAHungryMan s3 = SingleForAHungryMan.getInstance();
- SingleForAHungryMan s4 = SingleForAHungryMan.getInstance();
- System.out.println("Single For A Lazy Man:");
- System.out.println("s1 == s2?"+(s1.equals(s2)));
- System.out.println("s1 = "+s1);
- System.out.println("s2 = "+s2);
-
- System.out.println("Single For A Hungry Man:");
- System.out.println("s3 == s4?"+(s3.equals(s4)));
- System.out.println("s3 = "+s3);
- System.out.println("s4 = "+s4);
- }
- }
复制代码
|
|