首页 > 代码库 > 单例模式(Singleton)

单例模式(Singleton)

1.解决的问题:使得一个类只能够创建一个对象。
2.如何实现:
    ①私有化构造器,使得在类的外部不能调用该构造器
    ②在类的内部创建一个实例
    ③私有化该对象,通过公共的方法来调用(返回该对象)
    ④由于需要在类外部调用该方法(外部不能实例化该类对象),所以把该方法设置为static以便在类外部通过类名直接调用该方法,同时这个实例也应设置成静态(静态方法不能调用非静态的对象返回)

饿汉式
  1. public class TestSingleton {
  2. public static void main(String[] args) {
  3. Singleton s1 = Singleton.getSingleton();
  4. Singleton s2 = Singleton.getSingleton();
  5. System.out.println(s1 == s2);// true
  6. }
  7. }
  8. class Singleton {
  9. private static Singleton s = new Singleton();
  10. private Singleton() {
  11. }
  12. public static Singleton getSingleton() {
  13. return s;
  14. }
  15. }

 懒汉式  (延迟创建)可能存在线程安全问题,参见互斥锁
  1. public class TestSingleton1 {
  2. public static void main(String[] args) {
  3. Singleton1 s1 = Singleton1.getSingleton();
  4. Singleton1 s2 = Singleton1.getSingleton();
  5. System.out.println(s1 == s2);// true
  6. for (int i = 0; i < args.length; i++) {
  7. System.out.println(args[i]);
  8. }
  9. }
  10. }
  11. class Singleton1 {
  12. private static Singleton1 s = null;
  13. private Singleton1() {
  14. }
  15. public static Singleton1 getSingleton() {
  16. if (s == null) {
  17. s = new Singleton1();
  18. }
  19. return s;
  20. }
  21. }

更深的讨论:
http://www.barryzhang.com/archives/521

单例模式(Singleton)