【23种设计模式】创建型模式(工厂、抽象工厂、建造者、原型、单例)

这23种设计模式中,属于创建型模式的有5种分别为工厂模式、抽象工厂模式、建造者模式、原型模式、搭理模式。下面分别介绍:

1.工厂模式【Factory Method】

延迟实例化,接口+方法返回抽象类对象(顶层),然后将实现放到底层,工厂返回的对象均实现共同接口,因此调用工厂方法固定使用接口接收。
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
【23种设计模式】创建型模式(工厂、抽象工厂、建造者、原型、单例)_第1张图片
角色:
Creator:创建者,包含工厂方法
Product:产品

2.抽象工厂【Abstract Factory】

通过组合实现工厂,顶层为工厂模式,将工厂模式通过参数形式传入中间层进行组合,然后底层调用中间层。
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。
【23种设计模式】创建型模式(工厂、抽象工厂、建造者、原型、单例)_第2张图片角色:
abstracFactory:抽象工厂类,包含创建产品方法
AbstractProduct:抽象产品类

3.建造者模式【Builder】

【个人理解】建造模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到。
将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
用于构建复杂对象,进行分布构建,将复杂对象进行拆分,通过多个阶段逐步实现。
【23种设计模式】创建型模式(工厂、抽象工厂、建造者、原型、单例)_第3张图片角色:
Director:指导者,用于调用建造者执行创建产品
Builder:抽象建造者
ConcreteBuilder:实际建造者
Product:产品

4.原型模式【Prototype】

【个人理解】原型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法
用于需要连续调用对象,而且改变对象部分属性,其他属性值沿用的情况(例如:定时刷新对象某个值时,
可用此方法解决反复创建对象并复制的过程)。此模式利用clone方法,原型对象要实现cloneable接口,
重写Object对象的clone方法,注意浅复制与深度复制,clone只复制原始类型如int,string,float等,
对于集合类型以及对象类型则不复制需要手动调用Object的clone方法逐一复制后再复制到浅复制的对象中,
clone对象不调用构造函数
【23种设计模式】创建型模式(工厂、抽象工厂、建造者、原型、单例)_第4张图片角色:
Client:客户端用于调用原型对象,通过调用clone方法获取对象
Prototye:抽象原型,实现clone接口
Concreteprototye:实际原型对象,需要实现clone接口

5.单例模式【Singleton】

【个人理解】单例模式:Singleton的作用是保证在应用程序中,一个类Class只有一个实例存在。并提供全局访问。
单例模式2种实现:
(1)延迟创建,只有在调用时创建单例对象,只有用到时才创建,需要加同步锁
(2)初始创建,利用static在启动容器是创建单例对象,用不用对象都创建,但是不用加同步锁
实现要点:
(1)要有静态属性static 单例对象,目的利用static标记特性只初始化一次,只生成一个实例的特性。
(2)private私有构造方法,构造方法私有目的是禁止new创建对象
(3)实现方法1 getInstance方法,需要增加synchronized static
多例模式:就是利用list存储多个实例,然后通过索引号随机获取
【23种设计模式】创建型模式(工厂、抽象工厂、建造者、原型、单例)_第5张图片

你可能感兴趣的:(设计)