【23种设计模式——单例模式】

来源:互联网 发布:软件开发设计方案模板 编辑:程序博客网 时间:2024/05/20 06:08

数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”。

单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”

Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”

创建单例:
方法一:(保证不会多个线程同时创建)
1、private类型的无参构造,保证对象不能外部通过new来获得。
2、声明一个静态的此类的引用,不实例化。
3、创建一个public、静态的并且synchronized方法,返回值为此类。
类中如果此类的声明为空,则进行实例化。【供外部调用】
package com.boco.rnop.vr.atest;public class SingletonTest {// 单例模式方法一// 步骤一:创建私有空参构造,避免外部通过new创建实例private SingletonTest() {}//步骤二:声明一个对象的引用,并不创建实体private static SingletonTest instance = null;//步骤三:创建外部可以调用的方法,使用synchronized可以避免多线程调用发生冲突public static synchronized SingletonTest getInstance() {if (instance == null) {instance = new SingletonTest();}return instance;}}

对结果进行打印:
package com.boco.rnop.vr.atest;import java.lang.reflect.Constructor;public class test {public static void main(String[] args) {//单例模式一SingletonTest c1 = SingletonTest.getInstance();SingletonTest c2 = SingletonTest.getInstance();System.out.println(c1 == c2);System.out.println(c1.equals(c2));}
输出的结果都为true,说明指向的地址和实例都是一样的。

方法二:
1、private类型的无参构造。
2、创建一个私有的静态的对象。
3、创建一个public、静态的方法。返回2创建的实例,【供外部调用】。
package com.boco.rnop.vr.atest;public class SingletonTest {// 单例模式方法二// 步骤一:内部创建一个静态的自己的实体private static SingletonTest SingletonTest = new SingletonTest();// 步骤二:创建空参构造private SingletonTest() {}// 步骤三:提供一个供外部访问本类的方法public static SingletonTest instanceSingletonTest() {return SingletonTest;}}
结果打印
package com.boco.rnop.vr.atest;import java.lang.reflect.Constructor;public class test {public static void main(String[] args) {//单例模式二// 因为无参构造是私有的所以不允许使用new来进行实例化// Singleton c1 = new Singleton();Singleton c1 = Singleton.instanceSingleton();Singleton c2 = Singleton.instanceSingleton();System.out.println(c1 == c2);System.out.println(c1.equals(c2));}}
输出都是true。






原创粉丝点击