本文介绍: 原型模式(Prototype Pattern)是一种创建设计模式,它用于创建重复对象,同时保持性能。这种模式的核心思想是通过复制一个存在实例创建新的实例,而不是新建实例并对其进行初始化原型模式适用于创建复杂对象的情况,特别是当对象创建的成本比较高时,如需要进行繁琐的资源消耗型操作(例如,数据库文件读取操作)。原型(Prototype定义用于复制现有对象生成对象接口。具体原型(Concrete Prototype实现原型接口的类,并提供复制自身的方法
定义

原型模式(Prototype Pattern)是一种创建型设计模式,它用于创建重复对象,同时保持性能。这种模式的核心思想是通过复制一个存在实例来创建新的实例,而不是新建实例并对其进行初始化。原型模式适用于创建复杂对象的情况,特别是当对象创建的成本比较高时,如需要进行繁琐的资源消耗型操作(例如,数据库文件读取操作)。

原型模式通常涉及以下几个角色

  1. 原型(Prototype
  2. 具体原型(Concrete Prototype
  3. 客户(Client)
解决问题
使用场景
示例代码 1 – 浅拷贝实现:
public class ShallowPrototype implements Cloneable {
    private String name;

    public ShallowPrototype(String name) {
        this.name = name;
    }

    // getter和setter

    @Override
    public ShallowPrototype clone() throws CloneNotSupportedException {
        return (ShallowPrototype) super.clone();
    }
}
示例代码 2 – 深拷贝实现:
public class DeepPrototype implements Cloneable {
    private String name;
    private SomeComplexObject complexObject;

    public DeepPrototype(String name, SomeComplexObject complexObject) {
        this.name = name;
        this.complexObject = complexObject;
    }

    // getter和setter

    @Override
    public DeepPrototype clone() throws CloneNotSupportedException {
        DeepPrototype cloned = (DeepPrototype) super.clone();
        cloned.complexObject = new SomeComplexObject(this.complexObject); // 创建新的复杂对象实例
        return cloned;
    }
}

class SomeComplexObject {
    private String data;

    public SomeComplexObject(SomeComplexObject obj) {
        this.data = obj.data;
    }

    // getter和setter
}
主要符合的设计原则
  1. 开闭原则(Open-Closed Principle):
    • 原型模式支持开闭原则。一旦原型对象被创建并实现了克隆(Clone)方法,你可以通过克隆现有对象来添加新的对象实例,而无需修改现有的代码。
  2. 单一职责原则(Single Responsibility Principle):
    • 原型模式允许将对象创建和业务逻辑分离,使得每个类专注于单一的职责。原型对象专注于如何创建和复制自身的实例。
  3. 里氏替换原则(Liskov Substitution Principle):

原型模式主要通过实现开闭原则和单一职责原则来提高代码的可维护性和可扩展性。通过克隆方法,它允许在运行时动态地创建对象,提供了创建对象的灵活方式,同时避免了复杂的构造过程。

在JDK中的应用
在Spring中的应用

虽然Spring中原型作用域应用并不广泛,但在需要独立状态或避免共享状态的场景中,原型模式提供了一种有效的解决方案。需要注意的是,与单例Bean相比,原型Bean的生命周期管理依赖注入和销毁需要更多地由开发者控制


原文地址:https://blog.csdn.net/haoxin963/article/details/134571006

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_15127.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注