博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:6830 次
发布时间:2019-06-26

本文共 3241 字,大约阅读时间需要 10 分钟。

1.单例模式-UML类图

1.1UML类图

1.2单例模式特点:

构造函数私有化

定义静态方法返回当前对象

确保有且只有一个对象

确保在序列化和反序列化操作的过程当中保证是同一个对象

1.3 Java基础 序列化和反序列化

什么是序列化和反序列化?

序列化:将一个对象转为字节序列过程称之为序列化

反序列化:将字节序列转为对象过程称之为反序列化

importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInput;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;/*** Created by Xionghu at 2017/5/23 13:57* function:* version:*/public classTest {public static voidmain(String[] args) {serializableOrderBean(newOrderBean("121","手机","545"));OrderBean orderBean =deserializeOrderBean();System.out.println(orderBean.toString());}/*** 序列化订单对象*@paramorderBean*/public static voidserializableOrderBean(OrderBeanorderBean){ObjectOutputStream  outputStream =null;try{outputStream =newObjectOutputStream(newFileOutputStream(newFile("C:\\Users\\xionghu\\Desktop\\"+OrderBean.class.getSimpleName()+".txt")));outputStream.writeObject(orderBean);}catch(Exception e) {e.printStackTrace();}finally{if(outputStream!=null){try{outputStream.close();}catch(Exception e) {e.printStackTrace();}}}}public staticOrderBeandeserializeOrderBean(){ObjectInputStream objectInputStream =null;try{objectInputStream =newObjectInputStream(newFileInputStream(newFile("C:\\Users\\xionghu\\Desktop\\"+OrderBean.class.getSimpleName()+".txt")));Object readObject = objectInputStream.readObject();return(OrderBean) readObject;}catch(Exception e) {e.printStackTrace();}return null;}}复制代码

1.4 扩展序列化

2.单例模式—解决方案 2.1 懒汉式 --- 当你使用的时候我就创建单例对象 优势:性能高 补充:加了同步锁性能低 缺点:耗内存 (存在隐患---并发)

package com.kpioneer.arctirect.singleton.lazy;/** * 懒汉式 * Created by Xionghu at 2017/5/31 14:44 * function: 当程序第一次访问单件模式实例时才进行创建。 * version: */public class Singleton {    private static Singleton instance;    private Singleton() {    }    //在服务器,或者多线程访问    public static synchronized  Singleton getInstance() {        //假设: 3个线程 -- 并发线程        //场景: 同时调用getInstance方法        //线程-:        if (instance == null) {            instance = new Singleton();        }        return instance;    }}复制代码

2.2 饿汉式 --- 我不管你用不用我都提前准备好 优势:省内存 (安全) 缺点:耗内存 (静态变量生命周期的缘故)

package com.kpioneer.arctirect.singleton.hungry;/** * 饿汉式在 * Created by Xionghu at 2017/5/31 14:44 * function: 程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。 * version: */public class Singleton {    private static Singleton instance = new Singleton();    private Singleton() {    }    public static Singleton getInstance() {        return instance;    }    }复制代码

2.3 双重判断

package com.kpioneer.arctirect.singleton;/** * 双重选择 * Created by Xionghu at 2017/5/31 14:44 * function: * version: */public class Singleton {    //线程并发的时候,当我们的变量被修改之后,其它的并发线程及时收到通知,其它的线程就可以访问数据    //volatile--会屏蔽虚拟机优化过程    private volatile static Singleton instance;    private Singleton() {    }    public static Singleton getInstance() {        if (instance == null) {            synchronized (Singleton.class) {                if (instance == null) {                    instance = new Singleton();                }            }        }        return instance;    }}复制代码

2.4 枚举实现单例模式

2.5 静态内部类

2.6 容器管理单例对象 例如:java服务连接池(数据库连接池)、Spring IOC

3 单例模式具体应用 第三方 ImageLoader(通过源码分析,得到单例模式中双重检测方案) LayoutInflater 单例模式通过容器进行管理 LayoutInflater 源码分析 WindowManager、ActivityManager、PowerManager都是容器管理

转载地址:http://vinkl.baihongyu.com/

你可能感兴趣的文章
CentOS开机启动RabbitMQ
查看>>
SDL_AudioSpec结构体分析
查看>>
Maven工程发布tomcat无lib包问题
查看>>
使用Scrapy来爬取自己的CSDN文章 (2)
查看>>
MySQL 不用外键的话,如何让表起来关联呢?
查看>>
同时查看集群中多台机器日志的简单的shell脚本
查看>>
GemFire核心功能介绍
查看>>
ZUUL源码分析 <一
查看>>
Spring 启动记录(11)
查看>>
SphereView for tag cloud
查看>>
Autoconf和Automake,自动生成Makefile
查看>>
开源 免费 java CMS - FreeCMS1.2-功能说明-系统配置
查看>>
利用Javascript通过WMI取得Windows系统信息
查看>>
使用WakeLock使Android应用程序保持后台唤醒
查看>>
yum安装出错(Error: Cannot find a valid baseurl for ...
查看>>
上传OpenCart代码到服务器的FTP工具FileZilla使用教程
查看>>
观影《寒战》
查看>>
应用与数据库的 timezone
查看>>
用微博作为商务平台
查看>>
Xshell带领用户访问远程服务器教程
查看>>