设计模式之单例设计模式

来源:互联网 发布:php长连接 消息推送 编辑:程序博客网 时间:2024/05/01 21:09

一、单例模式

1、单例设计思想:保证在内存中只有一个对象

2、如何实现类在内存中只有一个对象:

(1)构造私有

(2)本身提供一个对象

(3)通过公共访问方式让外界访问

分类:

饿汉式

package com.edu_05;/** * 饿汉式:当这个类一被加载,就在内存中创建了一个对象 * */public class SingleMode {private SingleMode() {super();System.out.println("饿汉式构造方法");}private static SingleMode sMode = new SingleMode();public static SingleMode getModeDemo(){System.out.println("饿汉式公共方法");return sMode;}}
package com.edu_05;public class Test {public static void main(String[] args) {System.out.println("第一次调用");SingleMode demo = SingleMode.getModeDemo();System.out.println("第二次调用");SingleMode demo2 = SingleMode.getModeDemo();System.out.println(demo==demo2);}}/*第一次调用饿汉式构造方法饿汉式公共方法第二次调用饿汉式公共方法true*/
从结果可以看出,第一次调用方法的时候创建了一个实例

第二次的时候直接光调用了方法,所以对象只有一个

懒汉式

package com.edu_05;/** * 需要的时候才去创建对象,不需要的时候不创建 * */public class SingleMode2 {private SingleMode2() {super();System.out.println("懒汉式构造方法");}private static SingleMode2 sMode = null;public static SingleMode2 getModeDemo(){System.out.println("开始调用懒汉式公共方法");if (sMode==null) {System.out.println("实例还没有被创建");sMode = new SingleMode2();}else {System.out.println("实例已经被创建");}return sMode;}}
package com.edu_05;public class Test2 {public static void main(String[] args) {System.out.println("第一次调用");SingleMode2 demo = SingleMode2.getModeDemo();System.out.println("第二次调用");SingleMode2 demo2 = SingleMode2.getModeDemo();System.out.println(demo==demo2);}}/*  第一次调用开始调用懒汉式公共方法实例还没有被创建懒汉式构造方法第二次调用开始调用懒汉式公共方法实例已经被创建true*/

总结:

共同点:两种方案的构造方法和实例都是私有的,同时实例和公共方法是静态的。
不同点:饿汉式每次都不需要创建实例,直接返回一个已经创建好的实例。节省了时间,但是占用了空间
             懒汉式需要先进行判断,如果还没有创建实例,就创建,如果已经创建了,就直接返回实例。节省了空间,但是会影响程序运行时间





0 0
原创粉丝点击