设计模式
单例设计模式
方案一
提供私有化的构造方法
目的:防止外界随意调用创建对象创建私有化的本类对象
目的:防止外界直接获取创建的对象提供公共全局的访问点,供外界调用获取对象
可以通过全局访问点获取单例程序对象,获取的对象即为单例的。
示例代码
package cn.tedu.design;
/**
* 测试单例设计模式方案1
*/
public class TestSingle1 {
public static void main(String[] args) {
/*
可以通过全局访问点获取单例程序对象,获取的对象即为单例的。
*/
MySingle s1 = MySingle.getSingle();
MySingle s2 = MySingle.getSingle();
//测试打印的是否为同一个对象
System.out.println(s1);
System.out.println(s2);
System.out.println(s1 == s2);
}
}
/*
1.提供私有化的构造方法
2.创建私有化的本类对象
3.提供公共全局的访问点,供外界调用获取对象
*/
class MySingle{
/*
1.提供私有化的构造方法
目的:防止外界随意调用创建对象
*/
private MySingle(){}
/*
2.创建私有化的本类对象
目的:防止外界直接获取创建的对象
*/
private static MySingle single = new MySingle();
/*
3.提供公共全局的访问点,供外界调用获取对象
*/
public static MySingle getSingle(){
//返回创建的对象
return single;
}
}
方案二
思想:不在第一时间创建对象,而是,加载时才会创建
过程:
- 私有化构造方法
- 定义一个静态私有的成员变量,不创建对象,只有在加载时在创建。
提供公共的全局访问点
- 做判断,判断成员变量地址值是否为null,若为null则没有创建对象,需要创建一个唯一的对象。
- 若地址值不为null,代表已经创建过对象,则直接返回之前创建的对象地址值。
示例代码
package cn.tedu.design;
/**
* 测试单例设计模式方案2
*/
public class TestSingle2 {
public static void main(String[] args) {
MySingle2 s1 = MySingle2.getSingle2();
MySingle2 s2 = MySingle2.getSingle2();
System.out.println(s1);
System.out.println(s2);
}
}
class MySingle2{
/*
*/
private MySingle2(){}
static MySingle2 single2;
public static MySingle2 getSingle2(){
/*
创建对象前,先判断引用型变量是不是null,为null需要创建对象反之,直接返回
*/
if (single2 == null){
single2 = new MySingle2();
}
return single2;
}
}