设计模式 - 原型模式(Prototype Pattern)
介绍
原型模式是一种创建型设计模式,它使用已有的对象实例来创建新对象,即克隆。原型模式通过复制现有对象而非通过使用类的构造函数来创建新对象,这样可以避免构造函数中的复杂操作或者当构造函数不可用时提供一种替代方案。
实现
我们以一个文档处理系统为例来展示原型模式的应用。假设我们需要一个文档类,它可以保存文档内容,并且可以通过克隆来快速生成新的文档副本。
定义原型接口
首先定义一个原型接口,它声明了克隆的方法。
interface DocumentPrototype {
DocumentPrototype clone();
}
创建具体原型类
然后创建具体的实现类,它们实现了 DocumentPrototype
接口,并提供了具体的文档内容和克隆逻辑。
class Document implements DocumentPrototype {
private String title;
private String content;
private boolean isEditable;
public Document(String title, String content, boolean isEditable) {
this.title = title;
this.content = content;
this.isEditable = isEditable;
}
@Override
public DocumentPrototype clone() {
// 浅克隆
try {
return (Document) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError("Clone not supported", e);
}
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
public boolean isEditable() {
return isEditable;
}
public void setTitle(String title) {
this.title = title;
}
public void setContent(String content) {
this.content = content;
}
public void setIsEditable(boolean editable) {
isEditable = editable;
}
}
使用原型模式
接下来,在主程序中使用原型模式来创建文档副本。
public class DocumentManager {
public static void main(String[] args) {
Document originalDocument = new Document("Original Document", "This is the original content.", true);
// 克隆文档
Document clonedDocument = originalDocument.clone();
System.out.println("Original Document Title: " + originalDocument.getTitle());
System.out.println("Cloned Document Title: " + clonedDocument.getTitle());
// 修改克隆文档
clonedDocument.setTitle("Cloned Document");
clonedDocument.setContent("This is the cloned content.");
System.out.println("Modified Cloned Document Title: " + clonedDocument.getTitle());
System.out.println("Modified Cloned Document Content: " + clonedDocument.getContent());
}
}
使用场景
原型模式适用于以下情况:
- 当创建新对象的成本较高时,比如需要大量计算或访问数据库等。
- 当需要动态地复制一个对象,而不知道它的具体类时。
- 当需要创建的对象有很多共同之处,而仅仅某些属性不同。
总结
原型模式通过使用已有的对象实例来创建新对象,即克隆。这种方式不仅减少了创建新对象的成本,还可以避免构造函数中的复杂操作。此外,当构造函数不可用或者创建对象的代价较高时,原型模式提供了一种有效的解决方案。
以上就是原型模式的一个实现案例,希望这篇文章能帮助你理解原型模式的使用方式及其优势。
评论区