逸笔记-设计模式-创建型模式-原型模式

2023-04-12  本文已影响0人  lovefy

1.什么是原型模式

就是用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。简单来说就是拷贝一些类的对象

2.场景

比如我现在开一条流水线,制作华为mate50的手机,制作一台mate50需要几百个属性,人工做一台还好一些,如果要几百万台的话一模一样的mate50的话,这个时候就需要机器开一条流水线制作了。
例如人工制作mate50的代码

@Data
@AllArgsConstructor
public class Mate50 {

    /**
      *  手机壳
      */
    private String shell;

    /**
     *  电池
     */
    private String cell;


    /**
     *  芯片
     */
    private String slug;

}
@Test
public void makePhone() throws CloneNotSupportedException {
    Mate50 m = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m1 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m2 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m3 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m4 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m5 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m6 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m7 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m8 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m9 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
    Mate50 m10 = new Mate50("昆仑玻璃","5000MA电池","麒麟9030");
}
image.png

这样人工的话会new多个对象,并不方便,使用了原型模式后的代码 同样可以得到结果

@Data
@AllArgsConstructor
public class Mate50 implements Cloneable{

    /**
      *  手机壳
      */
    private String shell;

    /**
     *  电池
     */
    private String cell;


    /**
     *  芯片
     */
    private String slug;

    @Override
    public String toString() {
        System.out.println("地址:" + super.toString());
        return "Mate50{" +
        "手机壳='" + shell + '\'' +
        ", 电池='" + cell + '\'' +
        ", 芯片='" + slug + '\'' +
        '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        System.out.println("开始克隆");
        return super.clone();
    }
}
image.png

这样就解决了重复数据new对象的问题,不过clone方法是浅拷贝,如果要进行深拷贝的话,要实现额外的代码,这样就会使得对象里面的方法变的复杂,这个也是原型模式的一个缺点

上一篇 下一篇

猜你喜欢

热点阅读