创建型模式有以下五种
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
单例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
工厂模式
🌈🌈定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。对外部应隐藏内部的复杂实现,调用者只需要关注以那种方式调用产生自己想要的对象。但是每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
抽象工厂模式
🌈🌈是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。即提供一个超级工厂,生产多种产品的对象供调用者使用,当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。但是产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
建造者模式
🌈🌈使用多个简单的对象一步一步构建成一个复杂的对象,在用户不知道建造过程和细节的情况下直接创建复杂的对象。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 产品的建造和表示分离,实现解耦。客户端不需要知道内部的组成和建造细节。将复杂产品的创建过程分解在不同的方法,使得创建过程更加清晰。便于控制细节风险。各个建造类之间是互相独立的,有利于系统的扩展。但是 建造者模式所创建产品一般需要具备较多的共同点,使用范围有所限制。如果产品内部变化复杂,可能导致需要定义许多创建类来实现这种变化,导致系统变的庞大。
原型模式
🌈🌈用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。用于创建重复的对象,同时又能保证性能。自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可辅助实现撤销操作。需要为每一个类都配置一个 clone 方法,clone 方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违背了开闭原则。当实现深克隆时,需要编写较为复杂的代码,而且当对象之间存在多重嵌套引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来会比较麻烦。因此,深克隆、浅克隆需要运用得当。
单例模式
🌈🌈保证一个类仅有一个实例,并提供一个访问它的全局访问点,且该类能自行创建这个实例的一种模式。可以在内存中只有一个实例,减少了内存的开销,尤其是频繁创建和销毁实例;还有对资源的多重占用(例如写io操作)。但是不能继承,没有接口,与单一职责冲突,一个类只关心自己创建自己对象的逻辑,不关心外面如何实例化。