创建型模式 -原型模式 (Prototype Pattern)

它允许通过复制现有对象来创建新对象,而无需知道对象的具体创建细节。在 Java 中,可以通过实现 Cloneable 接口和重写 clone() 方法来实现原型模式。


  • 有深、浅两种克隆
    • 类实现 Cloneable 接口就可以深克隆
    • 如果类中又包含了引用类型对象,这部分将不能被深克隆,会变成浅克隆
      • 什么意思呢? 举例一个 Box 类, 类里面引用了 SubBox 类, 当 Box 被克隆的时候, SubBox 引用的是同一个对象
      	public class Box implements Cloneable {
      		private String name;
      		private String color;
      		private Double width;
      		// 引用类型, 指的是这部分只会被浅克隆
      		private SubBox subBox; 
      		// 那么怎么解决这种包含引用对象也深克隆呢? 
      		// 可以采用序列化写入成文件, 再反序列化转回来成对象,也能达到连引用类型也深克隆的效果
      		// 就像前端 JavaScript 对象,你应该没少写把对象转成 JSON 字符串再转回来,来达成深克隆
      	}
      	```
      
      

// 定义可克隆的形状类
class Shape implements Cloneable {
    private String type;

    public Shape(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    // 重写 clone 方法
    @Override
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}


// 客户端代码
public class PrototypePatternExample {
    public static void main(String[] args) {
        // 创建原始形状对象
        Shape originalShape = new Shape("Circle");
        // 克隆形状对象
        Shape clonedShape = (Shape) originalShape.clone();

        System.out.println("Original Shape Type: " + originalShape.getType());
        System.out.println("Cloned Shape Type: " + clonedShape.getType());
    }
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐