设计模式
单例设计模式
方案一
提供私有化的构造方法
目的:防止外界随意调用创建对象创建私有化的本类对象
目的:防止外界直接获取创建的对象提供公共全局的访问点,供外界调用获取对象
可以通过全局访问点获取单例程序对象,获取的对象即为单例的。
示例代码
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;}}
