创建型模式
简介
本文章旨在记录学习设计模式的过程,学习内容主要来自菜鸟教程,网址:设计模式,学习代码整理在:代码仓
五种创建型模式
工厂模式(Factory Pattern)
- 使用场景:需要在不同条件下创建不同实例时
- 主要思想:定义创建对象的接口,使其创建过程延迟到子类进行
- 代码示例:在代码仓中包名
design.pattern.factory
下
抽象工厂模式(Abstract Factory Pattern)
- 使用场景:需要提供一个创建一系列相关或相互依赖对象的接口
- 主要思想:类似于比工厂模式多一层,通过不同条件创建不同的工厂,不同的工厂负责创建对应的系列产品
- 代码示例:在代码仓中包名
design.pattern.abs.factory
下 - 个人理解:比如我很有钱,我要开两家店:店A卖衣服、店B卖零食;那么店A和店B都属于商店,就是我创建的两个工厂对象;而店A只卖衣服,它卖出的衣服就是工厂A所创建的对象;店B只卖零食,它卖出的零食就是工厂B所创建的对象。
单例模式(Singleton Pattern)
- 使用场景:一个全局使用的类频繁地创建与销毁
- 主要思想:判断系统中是否已经有这个单例,如果没有,就创建一个
- 代码示例:在代码仓中包名
design.pattern.singleton
下 - 个人理解:比如全世界只有一个地球,我们向地球请求什么服务(氧气等)时,需要通过地球这个单例来实现
- 实现方式:
- 懒汉式,不加锁,不支持多线程,在代码仓中包名
design.pattern.singleton.lazy
下 - 懒汉式,加锁,支持多线程,但效率较低,在代码仓中包名
design.pattern.singleton.secure
下 - 饿汉式,不加锁,支持多线程,但有可能在很早就初始化,导致资源的浪费,在代码仓中包名
design.pattern.singleton.hungry
下 - 双重锁/双重校验锁,加锁,支持多线程,且只会在第一次调用时初始化,在代码仓中包名
design.pattern.singleton.dcl
下 - 登记式/静态内部类,不加锁,支持多线程,且只会在第一次调用时初始化,在代码仓中包名
design.pattern.singleton.register
下
- 懒汉式,不加锁,不支持多线程,在代码仓中包名
建造者模式(Builder Pattern)
- 使用场景:在软件系统中,一个复杂对象的创建工作,它通常由各个部分的子对象用一定的算法构成;子对象可能会改变,但组合方式一般不变
- 主要思想:将变化的子对象和不变的组合方式分离开来
- 代码示例:在代码仓中包名
design.pattern.builder
下 - 个人理解:教程中示例简单易懂,请移步教程
原型模式(Prototype Pattern)
- 使用场景:类初始化需要消耗非常多的资源;通过new产生一个对象需要繁琐的数据准备或访问权限;一个对象需要给其他对象访问,而且各个调用者可能都需要修改其值时
- 主要思想:通过clone一个对象优化创建过程
- 代码示例:在代码苍中包名
design.pattern.prototype
下