##设计模式概述 创建型模式:关注对象创建过程的的设计模式; 结构型模式:关注类和对象组合的设计模式; 行为型模式:关注对象间的通信过程的设计模式;  ###单例模式的定义和作用 单例模式 目的:使得类的一个对象成为该类系统中的唯一实例; 定义:一个类有且只有一个实例,缤纷茄子形式梨花香整个系统提供; 单例模式要点:某个类只能由一个实例对象; 必须自行创建实例; 必须自行向整个系统提供这个实例; 实现:只提供私有的构造方法; 含有一个该类的静态私有对象; 提供一个静态的公有方法用于创建、获取静态私有对象; 实现方案: 饿汉式:对象创建过程中实例化; 懒汉式:静态公有方法中实例化; ###饿汉式的代码实现 单例模式: a、饿汉式(空间换时间 速度快 占用空间大) 1、创建类中私有构造 2、创建该类型的私有静态实例 3、创建公有静态方法返回静态实例对象  ###懒汉式的代码实现 ```java //懒汉式的代码实现 //懒汉式:类内实例对象创建时并不进行直接初始化,直到第一次调用get方法时,才完成初始化 1.创建私有构造方法 2.创建静态的该类实例对象 3.创建开放的静态方法提供实例对象 public class SingletonTwo{ private SigletonTwo(){ } private static SingletonTwo instance = null; public static SingletonTwo getInstance(){ if(instance==null) instance = new SingletonTwo(); return instance; } } ```  ###饿汉式 pk 懒汉式 饿汉式线程安全,空间换时间,第一次运行块 懒汉式存在线程风险,时间换空间,第一次运行慢 当多个线程并发操作,由于饿汉式在类加载时对象就被实例化创建,线程的访问对象都是唯一的。所以线程安全。而懒汉式由于线程的时间边切换,存在线程风险。 ###单例模式的特点及适用场景 单例模式的使用场景: 1、创建对象时占用资源过多,但同时又需要用到该类对象 2、对系统内资源要求统一读写,如读写配置信息 3、当多个实例存在可能引起程序逻辑错误,如号码生成器 单例模式的优点: 1.在内存中只有一个对象,节省内存空间 2.避免频繁的创建销毁对象,提高性能 3.避免对共享资源的多重占用 缺点: 1.拓展相对比较困难 2.如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失引发一系列系统问题。 Loading... ##设计模式概述 创建型模式:关注对象创建过程的的设计模式; 结构型模式:关注类和对象组合的设计模式; 行为型模式:关注对象间的通信过程的设计模式;  ###单例模式的定义和作用 单例模式 目的:使得类的一个对象成为该类系统中的唯一实例; 定义:一个类有且只有一个实例,缤纷茄子形式梨花香整个系统提供; 单例模式要点:某个类只能由一个实例对象; 必须自行创建实例; 必须自行向整个系统提供这个实例; 实现:只提供私有的构造方法; 含有一个该类的静态私有对象; 提供一个静态的公有方法用于创建、获取静态私有对象; 实现方案: 饿汉式:对象创建过程中实例化; 懒汉式:静态公有方法中实例化; ###饿汉式的代码实现 单例模式: a、饿汉式(空间换时间 速度快 占用空间大) 1、创建类中私有构造 2、创建该类型的私有静态实例 3、创建公有静态方法返回静态实例对象  ###懒汉式的代码实现 ```java //懒汉式的代码实现 //懒汉式:类内实例对象创建时并不进行直接初始化,直到第一次调用get方法时,才完成初始化 1.创建私有构造方法 2.创建静态的该类实例对象 3.创建开放的静态方法提供实例对象 public class SingletonTwo{ private SigletonTwo(){ } private static SingletonTwo instance = null; public static SingletonTwo getInstance(){ if(instance==null) instance = new SingletonTwo(); return instance; } } ```  ###饿汉式 pk 懒汉式 饿汉式线程安全,空间换时间,第一次运行块 懒汉式存在线程风险,时间换空间,第一次运行慢 当多个线程并发操作,由于饿汉式在类加载时对象就被实例化创建,线程的访问对象都是唯一的。所以线程安全。而懒汉式由于线程的时间边切换,存在线程风险。 ###单例模式的特点及适用场景 单例模式的使用场景: 1、创建对象时占用资源过多,但同时又需要用到该类对象 2、对系统内资源要求统一读写,如读写配置信息 3、当多个实例存在可能引起程序逻辑错误,如号码生成器 单例模式的优点: 1.在内存中只有一个对象,节省内存空间 2.避免频繁的创建销毁对象,提高性能 3.避免对共享资源的多重占用 缺点: 1.拓展相对比较困难 2.如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失引发一系列系统问题。 最后修改:2019 年 12 月 31 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏