本文介绍: 原型模式(Prototype Pattern)是一种创建型设计模式,它用于创建重复的对象,同时保持性能。这种模式的核心思想是通过复制一个已存在的实例来创建新的实例,而不是新建实例并对其进行初始化。原型模式适用于创建复杂对象的情况,特别是当对象创建的成本比较高时,如需要进行繁琐的资源消耗型操作(例如,数据库或文件的读取操作)。原型(Prototype)定义用于复制现有对象以生成新对象的接口。具体原型(Concrete Prototype)实现原型接口的类,并提供复制自身的方法。
定义:
原型模式(Prototype Pattern)是一种创建型设计模式,它用于创建重复的对象,同时保持性能。这种模式的核心思想是通过复制一个已存在的实例来创建新的实例,而不是新建实例并对其进行初始化。原型模式适用于创建复杂对象的情况,特别是当对象创建的成本比较高时,如需要进行繁琐的资源消耗型操作(例如,数据库或文件的读取操作)。
原型模式通常涉及以下几个角色:
解决的问题:
使用场景:
- 性能敏感的对象创建:
- 避免复杂的初始化步骤:
- 类不容易获取或无法预知:
- 动态加载或生成对象:
- 大量相似对象的场景:
- 当系统需要大量相似对象时,使用原型模式可以避免类初始化时的重复工作。
- 实现对象的解耦:
示例代码 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
}
主要符合的设计原则:
- 开闭原则(Open-Closed Principle):
- 单一职责原则(Single Responsibility Principle):
- 里氏替换原则(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进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。