网站首页 > java教程 正文
Prototype模式是一种创建型设计模式,通过复制现有的对象来创建新对象,而无需重新构造整个对象。在Prototype模式中,对象需要实现Cloneable接口并重写clone方法,这样就可以通过复制原型对象创建新的对象。
Prototype模式包括以下角色:
- 抽象原型类(Prototype):声明克隆方法的接口,是所有具体原型类的公共父类,它可以是接口、抽象类或具体的实现类。
- 具体原型类(ConcretePrototype):实现了抽象原型类中声明的克隆方法,在克隆方法中返回一个自己的克隆对象。
- 客户类(Client):使用原型对象只需要通过工厂方式创建或者直接实例化一个原型对象,然后通过原型对象的克隆方法就能获得多个相同的对象。
在Prototype模式中,具体原型类需要实现Cloneable接口并重写clone方法。在clone方法中,需要创建一个新的对象并将原有对象的属性复制到新的对象中。需要注意的是,在Java中,Cloneable是一个标记接口,并没有定义任何方法,因此实现Cloneable接口的类需要根据具体情况实现自己的clone方法。
下面是一个使用Prototype模式的Java代码示例:
首先定义一个抽象原型类:
public interface Prototype {
public Object clone();
}
然后定义一个具体原型类
public class ConcretePrototype implements Prototype {
private String name;
private int age;
public ConcretePrototype(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
}
在具体原型类中,实现了Prototype接口的clone()方法,使用super.clone()方法创建了一个新的对象并将原有对象的属性复制到新的对象中。需要注意的是,在clone()方法中需要处理
CloneNotSupportedException异常。
最后是客户类:
public class Client {
public static void main(String[] args) {
Prototype prototype = new ConcretePrototype("John", 30);
Prototype clone1 = (Prototype) prototype.clone();
Prototype clone2 = (Prototype) prototype.clone();
System.out.println(clone1.getClass().getName()); // ConcretePrototype
System.out.println(clone1.getName() == clone2.getName()); // true,两个对象的name属性指向同一块内存空间
System.out.println(clone1.getAge() == clone2.getAge()); // true,两个对象的age属性指向同一块内存空间
}
}
在客户类中,首先创建了一个具体原型类的对象作为原型对象,然后通过调用clone()方法创建了两个新的对象。需要注意的是,由于Java中的Object类的clone()方法是一个过时的API,因此在实际使用中需要使用Cloneable接口来创建新的对象。
Prototype模式是一种简单且实用的设计模式;在软件设计中,创建一个新的对象需要消耗时间和资源。而Prototype模式是一种通过复制现有的对象来创建新对象的设计模式,从而减少了创建新对象的时间和资源消耗。
猜你喜欢
- 2025-07-28 彻底搞懂Spring依赖注入(一)Bean实例创建过程
- 2025-07-28 一文深入了解23种设计模式与六大原则的细枝末节 内含视频和文档
- 2025-07-28 快速上手Java设计模式之简介(java中的设计模式及使用场景)
- 2025-07-28 《深入理解javascript原型和闭包系列》 知识点整理
- 2025-07-28 5 分钟搭建 Node.js 微服务原型(node.js创建服务)
- 2025-07-28 JYM 设计模式系列- 责任链模式,装饰模式,让你的代码更优雅!
- 2025-07-28 一文搞懂JavaScript原型及原型链(附代码)
- 2025-07-28 JavaScript 原型链、prototype、__proto__详解
- 2025-07-28 Java设计模式面试题及答案整理(2025最新版)
- 2025-07-28 Java 面试题:Spring 配置 Bean 实例化有哪些方式?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)