ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## **一、单例模式** 特点: * 单例类只能有一个实例 * 单例类必须自己创建自己的唯一实例 * 单例类必须给所有其他对象提供一个全局的实例 ## 单例模式之懒汉模式 ``` /** * 文件描述: * 创建用户:emotion * 创建时间:2019/12/9 */ public class SingletonPattern { /** * 内存可见性,所有线程都能看到共享内存的最新状态 */ private static volatile SingletonPattern singletonPattern; /** * 保护行构造方法,不允许被实例化 */ private SingletonPattern(){} /** * 获取唯一实例 * 双重检查锁定 */ public static SingletonPattern getInstance(){ //先检查实例是否存在,如果不存在才进入下面的同步块 if(singletonPattern==null){ //同步块,线程安全的创建实例 synchronized (SingletonPattern.class){ //再次检查实例是否存在,如果不存在才真正的创建实例 if(singletonPattern==null){ singletonPattern = new SingletonPattern(); } } } return singletonPattern; } } ``` ## 单例模式之饿汉模式 ``` /** * 文件描述: * 创建用户:emotion * 创建时间:2019/12/9 */ public class SingletonPattern { //类加载的时候就创建实例 private static SingletonPattern singletonPattern = new SingletonPattern(); /** * 保护行构造方法,不允许被实例化 */ private SingletonPattern(){} /** * 获取唯一实例 */ public static SingletonPattern getInstance(){ return singletonPattern; } } ``` ## **工厂模式** * 常用的工厂模式是静态工厂,利用static方法, * 作为一种类似于常见的工具Utils等辅助效果 * 一般情况下工厂类不需要被实例化 ``` interface food{} class A implements food{} class B implements food{} class C implements food{} public class FactoryPattern { /** * 保护型构造,不允许被实例化 */ private FactoryPattern(){} public static food getA(){ return new A(); } public static food getB(){ return new B(); } public static food getC(){ return new C(); } } class Client{ //客户端代码只需要将相应的参数传入即可得到对象 //用户不需要了解工厂类内部的逻辑。 public void get(String name){ food x = null ; if ( name.equals("A")) { x = FactoryPattern.getA(); }else if ( name.equals("B")){ x = FactoryPattern.getB(); }else { x = FactoryPattern.getC(); } } } ``` ## **抽象工厂模式**