原型模式是一种创建型设计模式,它允许我们通过克隆(复制)现有对象来创建新对象,而不是通过常规的实例化过程。在原型模式中,我们定义一个原型对象作为创建其他对象的基础。通过克隆原型对象,我们可以创建多个具有相同属性和行为的新对象。原型模式有六个阶段: ,,1. 请求阶段:客户端需要一个对象,但是不知道如何创建它。,2. 生成阶段:使用已有的对象作为模板来生成新的对象。,3. 返回阶段:将生成的新对象返回给客户端。,4. 验证阶段:客户端验证新生成的对象是否符合要求。,5. 适应性改变阶段:如果客户端需要修改新生成的对象,则将其转换为所需的类型。,6. 存储阶段:将新生成的对象存储在适当的位置以备将来使用。
本文目录导读:
原型模式(Prototype Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,在原型模式中,我们通过复制现有对象来创建新对象,而不是通过实例化一个新类来创建新对象,这种方式可以节省内存空间,提高程序运行效率,原型模式主要分为三种:单例模式、原型克隆和寄生。
一、单例模式(Singleton Pattern)
单例模式是一种常用的原型模式,它保证一个类只有一个实例,并提供一个全局访问点,单例模式的主要优点是它可以减少内存消耗,因为它只需要一个实例,单例模式还可以确保对这个唯一实例的访问是线程安全的。
1、饿汉式(Eager Initialization)
饿汉式是指在类加载时就完成了实例化,避免了线程同步问题,这种方式会浪费内存空间,因为它需要预先创建好一个实例。
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }
2、懒汉式(Lazy Initialization)
懒汉式是在第一次调用时才完成实例化,这样可以节省内存空间,这种方式需要考虑线程同步问题,以防止多个线程同时创建实例。
public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
原型克隆(Clone Pattern)
原型克隆模式是通过复制现有对象来创建新对象,这种方式可以节省内存空间,提高程序运行效率,原型克隆模式主要应用于当一个对象的结构比较复杂,且需要频繁地创建新对象时。
1、实现原型克隆接口(实现 Cloneable 接口)
我们需要让需要克隆的对象实现 Cloneable 接口,然后重写 clone() 方法,在 clone() 方法中,我们需要实现对象的深拷贝,即递归地复制对象的所有属性。
public class Person implements Cloneable { private String name; private int age; // ...其他属性和方法... @Override protected Object clone() throws CloneNotSupportedException { Person clonedPerson = (Person) super.clone(); clonedPerson.name = new String(this.name); // 需要深拷贝的属性需要进行特殊处理 return clonedPerson; } }
三、寄生(Dependency Inversion)
寄生模式是一种结构型设计模式,它将抽象与实现解耦,使得高层模块不依赖于低层模块的具体实现,在寄生模式中,我们使用接口来定义依赖关系,而不是直接使用具体的实现类,这样,当我们需要更换实现时,只需替换接口即可,而无需修改高层模块的代码。