极简设计模式-原型模式

定义

用原型实例来确定要创建对象的类型,并通过复制原型来创建新的对象。

结构中包含的角色

  1. Prototype(抽象原型角色):声明一个克隆自身的接口
  2. Concrete Prototype(具体原型角色):实现一个克隆自身的操作

最小可表达代码

// 定义拷贝接口
interface Cloneable
{
    public function copy();
    public function deepCopy();
}

// 具体实现
class ConcreteCloneable
{
    // 浅拷贝
    public function copy()
    {
        return clone $this;
    }
    
    // 深拷贝
    public function deepCopy()
    {
        return unserialize(serialize($this));
    }
}

一句话概括设计模式

克隆对象。

设计的原则和思想

克隆对象。

优点

  1. 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程。
  2. 逃避构造函数的约束。
  3. 深克隆保存对象的状态,可以实现状态模式。

缺点

  1. 每一个类都需要一个克隆方法,代码没法重用。
  2. 克隆包含循环引用的复杂对象会非常麻烦。

何时使用

  1. 创建一个对象的成本较高。
  2. 一个对象,多个调用者的场景。

实际应用场景

  1. Laravel 里面的Builder复制。
  2. JAVA 中的 Object clone() 方法。
  3. 电脑上的复制(Ctrl + C)和粘贴(Ctrl + V)操作。

浅拷贝与深拷贝

        浅拷贝 : 被拷贝对象的所有变量都含有与原对象相同的值,而且对其他对象的引用仍然是指向原来的对象。  

        深拷贝 : 完整复制一个对象。深拷贝把要拷贝的对象所引用的对象也拷贝了一次。可以使用序列化来做深拷贝。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值