设计模式 - 浅谈原型模式

原型模式

模式功能说明:通过复制一个已经存在的实例来返回新的实例,而不是通过新建一个实例。

模式思路与原理

  • 浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
  • 深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。clone明显是深复制,clone出来的对象是是不能去影响原型对象的。

示例

假设我们要创建一个复杂的Pizza对象,它包括底饼、酱料、配料等部分。
public class Sheep implements Cloneable {
    private String name;

    public Sheep(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public Sheep clone() {
        try {
            return (Sheep) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new AssertionError(); // Can't happen
        }
    }
}

public class PrototypeExample {
    public static void main(String[] args) {
        Sheep original = new Sheep("Jolly");
        System.out.println(original.getName()); // Output: Jolly

        Sheep copy = original.clone();
        copy.setName("Dolly");
        System.out.println(copy.getName()); // Output: Dolly
    }
}

通过复制original这个已经存在的Sheep实例,我们创建了一个新的Sheep实例copy,并且我们可以对copy进行修改而不影响original

总结

原型模式的本质就是clone,可以解决构建复杂对象的资源消耗问题,能再某些场景中提升构建对象的效率;还有一个重要的用途就是保护性拷贝,可以通过返回一个拷贝对象的形式,实现只读的限制。

end

本文链接:

https://pugqq.com/archives/prototype-pattern.html
设计模式 - 浅谈原型模式 - I/O
快来做第一个评论的人吧~

# 最近更新

Nginx的proxy_pass指令完全拆解2021-03-21

Nginx配置Jenkins域名访问2021-01-03

设计模式 - 浅谈备忘录模式2020-12-02

设计模式 - 浅谈中介者模式2020-11-23

设计模式 - 浅谈迭代器模式2020-11-02

MySQL5.7 字符集设置2020-10-26

设计模式 - 浅谈状态模式2020-10-23

设计模式 - 浅谈访问者模式2020-10-13

设计模式 - 浅谈观察者模式2020-10-12

设计模式 - 浅谈命令模式2020-09-21