# design-pattern **Repository Path**: wangyalei/design-pattern ## Basic Information - **Project Name**: design-pattern - **Description**: 23种设计模式全面解析 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-06-29 - **Last Updated**: 2022-02-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GOF23种设计模式全面解析 [![star](https://gitee.com/wangyalei/design-pattern/badge/star.svg?theme=dark)](https://gitee.com/wangyalei/design-pattern/stargazers) #### 创建型模式 - 类模式:对象模式 - 对象模式:单例 原型 工厂 建造者 **1. 单例模式 (某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例)** - 饿汉式 - 懒汉式 - 静态内部类 - 双重检验锁DCL - 静态内部类形式 - 枚举形式 单例模式的应用场景 - ` 在应用场景中,某类只要求生成一个对象的时候。 ` - ` 当对象需要被共享的场合。由于单例模式只允许创建一个对象,共享该对象可以节省内存,并加快对象访问速度。 ` - ` 当某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如多线程的线程池、网络连接池等 ` - ` 饿汉式:空间换时间,因为上来就实例化一个对象,占用了内存,(也不管你用还是不用)` - ` 懒汉式:简单的来说就是时间换空间,与饿汉式正好相反` **2. 工厂模式 (定义一个用于创建产品的接口,由子类决定生产什么产品)** - 简单工厂模式 (SimpleFactory) - 工厂方法模式 (FactoryMethod) - 抽象工厂模式 (AbstractFactory) 工厂模式的应用场景 - ` 只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。 ` - ` 简单工厂模式: 不完全满足OCP,不方便扩展,通过接收的参数的不同来返回不同的对象实例。对于增加新产品(新功能)必须要修改源程序 ` - ` 工厂方法模式: 满足OCP原则,以后业务扩展时,不需要修改原有代码,通过新添类来实现业务的扩展(增加),但是相应的曾加了很多类。 ` - ` 抽象工厂模式: 抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。缺点:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。` **3. 原型模式 (将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例)** - 原型模式的克隆分为浅克隆和深克隆,Java 中的 Object 类提供了浅克隆的 clone() 方法,具体原型类只要实现 Cloneable 接口就可实现对象的浅克隆 原型模式的应用场景 - ` 对象大部分相同,可以用原型模式创建,然后再做简单修改就可以了` `PS: 同一学校的“三好学生”奖状除了获奖人姓名不同,其他都相同,属于相似对象的复制,同样可以用原型模式创建,然后再做简单修改就可以了` **4. 建造者模式 (将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象)** 建造者模式特点 - ` 各个具体的建造者相互独立,有利于系统的扩展。` - ` 客户端不必知道产品内部组成的细节,便于控制细节风险。` - ` 该模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。` #### 结构型模式 (单例/原型/ 工厂/建造者) - 类模式:(类)适配器 - 对象模式: 代理 适配器 桥接 装饰 外观 享元 组合 5. 代理模式 - 静态代理 (static proxy) - 动态代理 (dynamic proxy) 6. 持续更新 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request