# design_patterns **Repository Path**: tangming96/design_patterns ## Basic Information - **Project Name**: design_patterns - **Description**: java设计模式学习仓库代码 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-26 - **Last Updated**: 2025-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # design_patterns #### 介绍 java设计模式学习代码仓库 ``` 包括大话设计模式的java实现代码和 黑马教程的设计模式实现代码 ``` #### 目录详情 - design_model_01 简单工厂模式 - design_model_02 工厂方法模式 - design_model_03 抽象工厂模式 - design_model_04 单例模式 - design_model_05 原型模式 ## 简单工厂模式 简单工厂模式最大的优点在于工厂类中包含了必要的判断逻辑,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了具体产品的依赖 ## 工厂方法模式 工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。[DP] > 简单工厂模式和工厂方法模式的区别 工厂方法模式是简单工厂模式的进一步抽象和推广,使用了多态工厂方法模式保持了简单工厂模式的优点,但是缺点是没加一个产品就需要加一个 产品工厂的类,增加了额外的开发量 ## 抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 > 抽象工厂模式的优点缺点 优点: 1.易于交换产品系列,由于具体工厂在一个应用中只需要初始化的时候出现一次,使得改变一个应用的具体工厂变的非常容易 ,他只需要改变具体工厂即可使用不同的产品配置 2.让具体的创建实例个过程和客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体的工厂实现分离 不会出现在客户代码中 缺点: ## 单例模式 > 分类 > 饿汉式:类加载就会导致该单实例对象被创建 > 懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建 饿汉式: - 静态变量方式 - 静态代码块方式 懒汉式: - 线程不安全 - 线程安全 - 双重检查 - 双重检测锁(Double Checked Locking,DCL),这么高大上的名字,但它其实就是两个if判断语句加一个synchronized锁 -_= - 静态内部类 - 枚举 使用单例模式的场景总结: 1. 需要频繁的进行创建和销毁的对象 2. 创建对象时耗时过多或耗费资源过多(重量级对象) 3. 经常用到的对象、工具类对象、频繁访问数据库或文件的对象(数据源、session工厂) > 单例注册表 单例注册表就是一种可以获得任何一个类的唯一实例的一个表。只要是相同一个单例注册表获取到的同一个类的实例,总是相同 ## 原型模式