设计模式 - 浅谈原型模式

原型模式

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

模式思路与原理

  • 浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
  • 深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。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
快来做第一个评论的人吧~

# 最近更新

JDK国内镜像加速下载2023-05-02

博客评论系统增加悄悄话/匿名留言模式2023-04-10

博客评论系统引入极验api2023-03-22

博客评论系统表情栏优化2023-02-04

centos用firewalld开放端口2022-08-12

数据结构与算法之红黑树2022-03-12

数据结构与算法之字典树2022-03-02

数据结构与算法之LSM树2022-02-24

数据结构与算法之B+树2022-02-15

数据结构与算法之堆2022-02-12
验证出错,请重试