1、模式介绍:
原型模式(Prototype Pattern)是一种创建型设计模式,它允许对象在创建新实例时通过复制现有实例而不是通过实例化新对象来完成。这样做可以避免耗费大量的资源和时间来初始化对象。原型模式涉及一个被复制的原型对象,在这个模式中,要创建的对象通过请求原型对象来进行复制。
2、应用场景:
需要创建大量相似对象:当需要创建大量具有相似属性的对象时,使用原型模式可以避免重复的初始化工作,提高性能。
对象的创建开销较大:如果对象的创建开销很大,例如读取数据库或文件操作,使用原型模式可以节省时间。
动态配置对象:当需要动态配置对象时,可以先创建一个原型对象,然后通过复制来生成新的对象并根据需要进行修改。
3、优点:
减少对象初始化开销:避免了重复的初始化工作,提高了对象创建的效率。
简化对象的创建:无需关心对象的具体创建过程,只需通过复制原型对象来生成新对象。
动态配置对象:可以通过复制原型对象来动态配置新对象,增加灵活性。
4、缺点:
深拷贝问题:原型模式需要确保对象的属性都能被正确复制,特别是对于复杂对象来说,需要注意深拷贝和浅拷贝的问题。
类必须实现克隆接口:要使用原型模式,类必须实现克隆方法,这在某些情况下可能是不可行的。
5、代码实现:
/**
* 实现 Cloneable 接口的原型类
*
* @author FM_南风
* @date 2024/6/23
*/
@Data
public class Shape implements Cloneable {
private String type;
@Override
public Shape clone() {
try {
return (Shape) super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
/**
* 具体原型类
*
* @author FM_南风
* @date 2024/6/23
*/
public class Rectangle extends Shape {
public Rectangle() {
setType("Rectangle原型类");
}
}
/**
* 具体原型类
*
* @author FM_南风
* @date 2024/6/23
*/
public class Circle extends Shape {
public Circle() {
setType("Circle原型类");
}
}
/**
* 应用
*
* @author FM_南风
* @date 2024/6/23
*/
public class PrototypeClient {
public static void main(String[] args) {
Shape rectangle = new Rectangle();
Shape circle = new Circle();
// 使用原型对象创建新对象
Shape clonedRectangle = rectangle.clone();
Shape clonedCircle = circle.clone();
System.out.println(clonedRectangle.getType());
System.out.println(clonedCircle.getType());
}
}