欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 编程-设计模式 5:原型模式

编程-设计模式 5:原型模式

2024/10/24 12:23:09 来源:https://blog.csdn.net/qq_45831414/article/details/141052365  浏览:    关键词:编程-设计模式 5:原型模式

设计模式 5:原型模式

定义与目的
  • 定义:原型模式通过复制现有的实例来创建新对象,而不是通过构造函数创建。
  • 目的:这种模式的主要目的是为了提高创建对象的性能,特别是在创建对象的成本较高时。通过克隆现有的实例,可以避免构造函数中的初始化开销。
实现示例

假设我们有一个复杂的文档对象,创建这样一个对象可能涉及到大量的计算或数据库查询。我们可以使用原型模式来避免重复这些昂贵的操作。

import java.util.Date;
import java.util.List;// 定义产品接口
public interface Document {void print();Document clone();
}// 具体产品
public class ComplexDocument implements Document {private String title;private List<String> content;private Date creationDate;public ComplexDocument(String title, List<String> content, Date creationDate) {this.title = title;this.content = content;this.creationDate = creationDate;}@Overridepublic void print() {System.out.println("Title: " + title);System.out.println("Creation Date: " + creationDate);System.out.println("Content:");for (String line : content) {System.out.println(line);}}@Overridepublic Document clone() {try {// 对于不可变对象(如String),使用浅拷贝是安全的// 对于可变对象(如List<String>),使用深拷贝是安全的ComplexDocument clonedDocument = (ComplexDocument) super.clone();clonedDocument.content = new ArrayList<>(this.content);  // 深拷贝return clonedDocument;} catch (CloneNotSupportedException e) {throw new AssertionError();}}// Getters and Setters for demonstration purposespublic String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public List<String> getContent() {return content;}public void setContent(List<String> content) {this.content = content;}public Date getCreationDate() {return creationDate;}public void setCreationDate(Date creationDate) {this.creationDate = creationDate;}
}// 客户端代码
public class Client {public static void main(String[] args) {// 创建原始文档List<String> content = List.of("Introduction", "Chapter 1", "Conclusion");Date creationDate = new Date();Document originalDocument = new ComplexDocument("My Document", content, creationDate);// 打印原始文档originalDocument.print();// 克隆文档Document clonedDocument = originalDocument.clone();// 修改克隆文档的标题((ComplexDocument) clonedDocument).setTitle("Cloned Document");// 打印克隆文档clonedDocument.print();}
}
使用场景
  • 当创建新对象的成本较高时。
  • 当你需要创建许多相似的对象,但又不想每次都执行完整的初始化过程时。
  • 当你需要避免对象创建时的昂贵开销时。

原型模式通过复制现有的实例来创建新对象,这样可以节省时间和资源。它适用于那些初始化成本较高的对象,或者在需要创建大量相似对象时。

小结

原型模式是一种高效的对象创建方式,特别是在创建成本高的对象时。它通过克隆现有对象来创建新对象,从而减少了初始化的开销。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com