[设计模式] 浅谈原型模式

2024 年 4 月 24 日 星期三
/ ,
6

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

原型模式

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

模式思路与原理

  • 浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。

  • 深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。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,可以解决构建复杂对象的资源消耗问题,能再某些场景中提升构建对象的效率;还有一个重要的用途就是保护性拷贝,可以通过返回一个拷贝对象的形式,实现只读的限制。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...