设计模式 -单例模式
简单说一下 设计模式的概念, 设计模式在我看来就是一种 成熟的“模板”。是一套反复被使用的,多数人知晓的,经过分类编码的,代码设计经验的一种总结。使用它的目的是为了增强代码的重用性,让代码更容易被他人理解,保证代码的可靠性。
单例模式的概念就是 一个类的对象有且只有一个!常用的 比如说 日志对象, 工具类,缓存 等。
单例模式分两种 最简单的饿汉模式
public class SingleEHanfirst {
//1 构造方法私有化,不允许 外部直接创建对象!
private SingleEHan(){
}
//2 创建类的唯一实例!变为静态的 变量 (对象归类所有)
static SingleEHan instanace = new SingleEHan();
}
测试代码
SingleEHanfist f1 = SingleEHanfist.instanace;
SingleEHanfist f2 = SingleEHanfist.instanace;
if(f1==f2)
{
System.out.println("两个是一个对象");
}
这样写程序有一个问题,就是我们在访问一个类的时候,这样去直接的访问类的成员变量,不符合我们面向对象的思想! 所以我们应该把instance 这个成员变量私有化,通过静态方法去访问静态变量改进如下
public class SingleEHan {
//1 构造方法私有化,不允许 外部直接创建对象!
private SingleEHan(){
}
//2 创建类的唯一实例!变为静态的 变量 (对象归类所有)
private static SingleEHan instanace = new SingleEHan();
//3 提供静态方法获取实例
public static SingleEHan getInstance(){
return instanace;
}
}
测试代码如下
SingleLanhan s1 = SingleLanhan.getInstance();
SingleLanhan s2 = SingleLanhan.getInstance();
if(s1==s2)
{
System.out.println("两个是一个对象");
}
懒汉模式基本思路和饿汉模式差不多
public class SingleLanhan {
//1 构造方法私有化,不允许 外部直接创建对象!
private SingleLanhan(){
}
//**声明**类的唯一实例
private static SingleLanhan instanace;
//提供一个用于获取实例的方法!
public static SingleLanhan getInstance(){
//如果类的实例为空 创建
if(instanace==null)
{
instanace = new SingleLanhan();
}
return instanace;
}
}
测试代码与上相同。
两种模式简单的比较
饿汉模式的特点 加载类的时候 已经创建了类的 实例 ,获取对象的时候比较快 ,因为类的实例在类加载的时候已经创建了。线程安全
懒汉模式则正好相反, 加载类的时候比较快,获取对象的时候比较慢。线程不安全