创建型设计模式:
抽象工厂(Abstract Factory):
- 用途:提供一个接口以创建一系列相关或相互依赖的对象,而无需指定具体的类。
2.场景:
1. 一个系统要独立于它的产品的创建。
2. 一个系统要由多个产品系列中的一个来配置。
3.强调一系列相关的产品对象的设计以便进行联合使用。
4.提供一个产品类库,但只对外提供它们的接口而不是实现
3.结构图: 创建一系列相关的对象
4.已知应用:JDK中的Collection,Map
5.工厂方法(Factory Method):
1.用途:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2.场景:
1. 一个类不知道它所创建的对象的类。
2. 一个类希望由它的子类来指定它所创建的对象。
3.多用于框架代码中,面向接口编程。
3.结构图:创建一个对象
4.已知应用:
1. JDK中的ThreadPoolExecutor的阻塞队列
2.AbstractExecutorService.submit方法,在ScheduledThreadPoolExecutor中返回不同的Future
建造者(Builder):
- 用途:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 场景:
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2.当构造过程必须允许被构造的对象有不同的表示时。
- 结构图: 定义一系列的步骤去创建一类产品
4.已知应用
1.JDK中的StringBuilder
2.Spring中的BeanDefinitionBuilder
单例模式
1.用途:涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
2.场景:
1.要求生产唯一序列号。
2.WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
3. 创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
3.结构图:
原型模式
1.用途:实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式
2.场景:
1.资源优化场景。
2.类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。
3.性能和安全要求的场景。
4.通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。
5.一个对象多个修改者的场景。
3.注意事项:与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。浅拷贝实现 Cloneable,重写,深拷贝是通过实现 Serializable 读取二进制流。
4.结构图:clone()方法