Java单例模式说出来时,我觉得这东西学过了还不简单!结果,当我自己写时却感觉到有些手生,这应该是平时做的东西少的缘故。。。。
于是从网上查了一下,却也发现网上对这个问题说起来也是乱七八糟的,让我十分迷糊!
自己查了下资料。下面自己总结下吧,说错了希望大家指正!技术就是交流才能进步的!
模式中的单例模式分为:饿汉模式和懒汉模式。
顾名思义:
饿汉模式是对食物(Singleton)比较渴望的,所有一开始就new了一个来满足(食欲)
饿汉式:
public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
public static Singleton getInstance(){return singletion;}
}
饿汉式在声明实例变量时不加final关键字,并且非正常使用时可能存在问题
如:Singleton s = Singleton.getInstance();
s.executeMethod();
s = null; // 非正常使用
当另一个人使用时:
Singleton s = Singleton.getInstance();
s.executeMethod(); // throw a NullPointException
懒汉模式是对食物(Singleton)没兴趣或者懒得自己获取食物,直到饿的时候(用到的时候)才获取一个
懒汉式:
public class Singleton{
private static Singleton singleton = null;
public static synchronized synchronized getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种
懒汉式没有加私有的构造函数
从实现方式来讲他们最大的区别就是懒汉式是延时加载,他在加载类时创建实例,而饿汉式在虚拟机启动的时候就会创建。
---------------------------------------------------------------------------------------------------------------------------------------------------
工厂模式按照《Java与模式》中的提法分为三类: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory)
单例模式参考:http://topic.csdn.net/u/20071111/14/d9cbf766-765a-4315-a49f-be7888d1308b.html