前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的原型设计模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教。
小威在此先感谢各位大佬啦~~
个人主页:小威要向诸佬学习呀
个人简介:大家好,我是小威,一个想要与大家共同进步的男人
目前状况:24届毕业生,在一家满意的公司实习欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬
以下正文开始
原型模式(Prototype Pattern)是23种设计模式之一,它的主要作用是用于创建重复的对象,同时又能保证性能。通过克隆一个现有对象来生成新的对象,而不是使用 new 运算符创建。
实现原理
原型模式的实现原理非常简单,首先需要一个可以被克隆的原型对象,然后通过调用该原型对象的克隆方法,从而得到一个新的对象。
在 Java 中,Object 类提供了一个 clone() 方法,该方法可以将一个对象复制一份,但需要实现 Cloneable 接口,否则会抛出 CloneNotSupportedException 异常。
接下来介绍下原型模式的优缺点
优点:
可以通过克隆现有的对象来创建新的对象,避免了对象的重复创建,提高了系统性能。 可以动态的添加或修改原型对象的属性,可以扩展性好。
缺点:
必须实现 Cloneable 接口,并重写 clone() 方法,这在某些情况下可能会影响到其他接口的实现。
对象中包含的所有成员变量都必须支持 clone() 方法,否则无法进行克隆。 克隆是浅拷贝,如果需要深拷贝需要额外处理。
适用场景
希望避免重复创建相似对象,同时又希望保证性能。
希望动态的扩展对象的属性,同时又希望保证代码的简洁性。
下面通过一个案例来一起来学习原型模式,详细代码片段如下:
// 定义一个可克隆对象接口
interface Cloneable {
public Object clone();
}
// 定义一个具体可克隆对象类
class ConcretePrototype implements Cloneable {
private String name;
public ConcretePrototype(String name) {
this.name = name;
}
// 实现克隆方法,返回新的对象副本
public Object clone() {
return new ConcretePrototype(this.name);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
// 客户端调用
public class Client {
public static void main(String[] args) {
// 创建原型对象
ConcretePrototype prototype = new ConcretePrototype("origin");
// 复制一个新对象
ConcretePrototype clone = (ConcretePrototype)prototype.clone();
// 修改克隆对象的属性
clone.setName("clone");
// 输出结果
System.out.println(prototype.getName()); // 输出 "origin"
System.out.println(clone.getName()); // 输出 "clone"
}
}
在上面的示例中,我们首先定义了一个可克隆对象接口 Cloneable 和一个具体可克隆对象类 ConcretePrototype。该类实现了克隆方法,并在其中创建了一个新的对象副本。客户端通过调用克隆方法来复制一个新的对象,并可以修改其属性。
这是一个简单的原型模式示例,它展示了如何通过复制现有对象来生成新的对象副本。在实际应用中,原型模式通常会更复杂一些,但这个简单示例足以说明原型模式的基本原理。
好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论
希望能和诸佬们一起努力,今后我们顶峰相见
再次感谢各位小伙伴儿们的支持