【Java】【设计模式 Design Pattern】单例模式 Singleton
2021-02-14 09:19
标签:closed 优先 方法 加载 处理 固定 let gif 跳过 设计模式是在大量的实践中总结和理论化之后的最佳的类设计结构,编程风格,和解决问题的方式 设计模式已经帮助我们想好了所有可能的设计问题,总结在这些各种各样的设计模式当中,也成为GOF23 恕我直言,设计模式是OOP的精华总结 并不是一定要完全遵守这7大原则,耦合一定存在,只能说在一定情况降低到最小就行 - 单一职责 - 接口隔离 - 依赖倒转 反转控制 IOC - 里氏替换 - 开闭原则 - 迪米特法则 - 合成服用 顾名思义,一个类只存在唯一的一个实例 设计模式有8种写法 - 写法简单、类加载时,完成了实例化,避免多线程同步问题 - 不能懒加载,如果一直没有使用过这个实例,就造成了内存占用的浪费,懒加载,就是说等我需要使用这个实例时,再执行初始化加载出来调用 - 可用,但是会浪费内存 - 饿汉本身已经非常形容这个静态加载的意思了,不过有没有使用这个实例,先吃了内存空间再说 初始化过程放在了静态代码块,比上面更优先加载出来,其他一样 - 可用 - 实现了懒加载行为,但是线程不安全,只能单线程 - 多线程如果没有进入if语句判断就会直接new新实例产生 - 禁止使用 - 解决线程不安全的问题 - 效率太低,每次获取实例都需要执行同步 - 能用,不推荐使用 - 代码复杂,线程反而不安全 - 禁用 - 解决线程安全 - 懒加载实现 - 效率较高 - 可用 - 采用类加载的机制实现懒加载,同时避免了线程安全的问题 - 在调用方法时才会加载内部类返回实例 - 推荐 - JDK1.5特性 - 线程绝对安全、实现单例 - 不能被序列化重新创建 - 推荐 【Java】【设计模式 Design Pattern】单例模式 Singleton 标签:closed 优先 方法 加载 处理 固定 let gif 跳过 原文地址:https://www.cnblogs.com/mindzone/p/12722554.html什么是设计模式?
七大原则:
什么是单例模式?
饿汉式第一种:
public class Singleton01 {
// 私有构造器
private Singleton01 (){}
// 静态固定实例
private static final Singleton01 single = new Singleton01();
// 提供公开的提供实例方法即可
public static Singleton01 getInstance() {
return single;
}
}
饿汉式第二种:
public class Singleton01 {
// 私有构造器
private Singleton01 (){}
// 声明单例实例
private static Singleton01 instance;
// 交给静态块加载
static { instance = new Singleton01(); }
// 一样的获取方法
public static Singleton01 getInstance(){ return instance; }
}
懒汉式第一种
public class Singleton {
private Singleton (){}
private static Singleton instance;
// 如果instance为空 就new出来,反之直接返回
public static Singleton getInstance(){
if (instance == null) instance = new Singleton();
return instance;
}
}
懒汉式第二种
public class Singleton {
private Singleton (){}
private static Singleton instance;
// 给方法加锁,同步处理化
public static synchronized Singleton getInstance(){
if (instance == null) instance = new Singleton();
return instance;
}
}
懒汉式第三种
public class Singleton {
private Singleton (){}
private static Singleton instance;
// 经过判断后枷锁实例,多线程直接跳过判断获取,还是会创建实例
public static Singleton getInstance(){
if (instance == null) synchronized (Singleton.class) { instance = new Singleton();}
return instance;
}
}
懒汉式第四种双重检查
public class Singleton {
private Singleton (){}
// 设置可见
private static volatile Singleton instance;
// 二次检查
public static Singleton getInstance(){
if (instance == null) synchronized (Singleton.class) {
if (instance == null) instance = new Singleton();
}
return instance;
}
}
静态内部类实例
public class Singleton {
private Singleton (){}
// 静态内部类不会重复加载,其静态属性也如此
private static final class SingleInstanceClass{
private static final Singleton INSTANCE = new Singleton();
}
// 返回内部类的属性实例即可
public static Singleton getInstance(){
return SingleInstanceClass.INSTANCE;
}
}
枚举,永远的神
public enum Singleton{
INSTANCE;
public void ok(){
System.out.println("ok!");
}
}
Runtime经典的饿汉式
上一篇:Python 面向对象编程
文章标题:【Java】【设计模式 Design Pattern】单例模式 Singleton
文章链接:http://soscw.com/index.php/essay/55166.html