单例模式也可以叫做单例,具有以下特点:
1.一个类只能创建对象
2.可以节省空间
3.单独可以避免因多个实例造成的最终结果冲突
分类:1.饿汉式
2.懒汉式
如何产生单例
1.不能随便让外界调用到构造方法
2.私有构造方法
3.自己本类调用构造方法创建对象
以下是两种模式的实例代码
饿汉模式
package com.qf.demo3;
public class HuangryInstance {
private HuangryInstance() //创建私有化构造方法
{
}
private final static HuangryInstance huangryInstance = new
HuangryInstance(); //调用自己本类构方法创建对象
public static HuangryInstance getHuangryinstance() { //对外留一个访问函数
return huangryInstance;
}
}
懒汉模式
package com.qf.demo3;
public class LazyInstance {
// 1私有化构造方法
private LazyInstance()
{
}
private static LazyInstance instance; //声明一个私有的静态引用变量
public static LazyInstance getInstance()
{
if(instance==null)
{
instance = new LazyInstance(); //创建本类对象并给提前声明的引用变量
}
return instance;
}
}
测试两个模式
单例模式
一个类只能有一个对象
1.可以节省内存空间
2.可以避免因多个实例造成的最终结果冲突
分类
1.饿汉式
2.懒汉式
如何产生单例
1.不能随便让外界调用到构造方法
2.私有构造方法
3.自己本类调用构造方法创建对象
1.饿汉式:
1私有化构造方法
2自己本类 调用构造方法创建一个对象 final
3创建一个get方法为外界提供 这个对象
2.懒汉式
1私有化构造方法
2 添加私有属性 并不初始化
3 添加对外访问的接口 getInstance
在这个方法里面判断 当 属性为null 创建对象,不为null 则直接返回
4 将 方法和属性设置为 静态的
线程安全上:饿汉是线程安全的
懒汉是线程不安全的
package com.qf.demo3;
public class Test {
public static void main(String[] args) {
//创建三个不同对象输出打印,观察三个对象地址是否一样
HuangryInstance huangryInstance = HuangryInstance.getHuangryinstance();
System.out.println(huangryInstance);
HuangryInstance huangryInstance2 = HuangryInstance.getHuangryinstance();
System.out.println(huangryInstance2);
HuangryInstance huangryInstance3 = HuangryInstance.getHuangryinstance();
System.out.println(huangryInstance3);
/*
*输出三个对象的地址
* com.qf.demo3.HuangryInstance@1db9742
com.qf.demo3.HuangryInstance@1db9742
com.qf.demo3.HuangryInstance@1db9742
*/
//创建三个不同对象输出打印,观察三个对象地址是否一样
LazyInstance lazyInstance = LazyInstance.getInstance();
System.out.println(lazyInstance);
LazyInstance lazyInstance2 = LazyInstance.getInstance();
System.out.println(lazyInstance2);
LazyInstance lazyInstance3 = LazyInstance.getInstance();
System.out.println(lazyInstance3);
/*
* 输出三个对象的地址值
* com.qf.demo3.LazyInstance@106d69c
* com.qf.demo3.LazyInstance@106d69c
*com.qf.demo3.LazyInstance@106d69c
*/
}
}
网友评论