设计模式 | 原型模式

简介: 设计模式 | 原型模式

说明

原型模式也是创建型的设计模式,先创建好一个原型对象,然后对他进行拷贝来创建新的对象,这样就免去了类创建是重复初始化操作。原型模式适用于对大对象的创建,大对象每次new消耗很大,原型模式仅需内存拷贝即可

示例

<?php
/**
 * Created by 憧憬.
 * User: longshilin
 * Date: 2020-01-23
 * Time: 22:00
 */
class Names {
}
class User {
    public $name;
    public function __construct()
    {
        $this->name = new Names();
    }
    public function setName($name)
    {
        $this->name->nickname = $name;
    }
    /**
     * 直接在这个魔术方法也指定需要再次克隆的对象 可以解决这个
     * @author: 憧憬
     */
    public function __clone()
    {
        $this->name = clone $this->name;
    }
}
// 本身php就支持克隆 clone
$user = new User();
$newUser = clone $user;
$user->setName('憧憬');
print_r($user->name);
print_r($newUser->name);
echo PHP_EOL;
// 但是clone操作是一个浅拷贝 我们name这个成员属性是一个对象  当我们去修改这个对象里面属性的时候 克隆的对象也能获取到同一个数据
// 所以我们需要考虑到深拷贝 可以直接添加__clone来解决  还可以利用反序列化
$hUser = new User();
$wUser = unserialize(serialize($hUser));
$hUser->setName('憧憬');
print_r($hUser->name);
print_r($wUser->name);
// 以上也是可行的
  • 深拷贝

被拷贝对象的所有变量都含有原对象的值,除了那些引用其他对象的变量, 那些引用其他对象的变量将指向一个被拷贝的新对象,而不再是原来那些引用的对象。即深拷贝把要拷贝的对象所引用的对象也拷贝了一次。而这种对被引用到的对象拷贝叫做间接拷贝。

在决定以深拷贝的方式拷贝一个对象的时候,必须决定对间接拷贝的对象时采取浅拷贝还是深拷贝还是继续采用深拷贝。

  • 序列化深拷贝

利用序列化来做深拷贝,把对象写到流里的过程是序列化的过程,这一过程称为“冷冻”,反序列化对象的过程叫做“解冻”。可以达到深拷贝的效果

  • 浅拷贝

被拷贝对象的所有变量都含有与原对象相同的值,而且与其他对象的引用仍然指向原来的对象,即浅拷贝只负责当前对象实例,对引用对象不做拷贝

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

目录
相关文章
|
6天前
|
设计模式 安全 Java
【设计模式】原型模式
【设计模式】原型模式
|
6天前
|
设计模式 Java 关系型数据库
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
|
6天前
|
设计模式 Java
Java设计模式【五】:原型模式
Java设计模式【五】:原型模式
19 0
|
6月前
|
设计模式 Java 关系型数据库
认真学习设计模式之原型模式(Prototype Pattern)
认真学习设计模式之原型模式(Prototype Pattern)
39 0
认真学习设计模式之原型模式(Prototype Pattern)
|
6天前
|
设计模式 存储
二十三种设计模式全面解析-原型模式进阶之原型管理器:集中管理对象原型的设计模式之道
二十三种设计模式全面解析-原型模式进阶之原型管理器:集中管理对象原型的设计模式之道
|
6天前
|
设计模式 Java
【设计模式系列笔记】原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而无需知道其具体类型。这种模式属于对象创建型模式,通过克隆来避免使用new关键字创建对象,提高性能和降低系统的耦合度。
33 6
|
6天前
|
设计模式 Java
小谈设计模式(10)—原型模式
小谈设计模式(10)—原型模式
|
6天前
|
设计模式 Java
23种设计模式,原型模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新的对象,而无需知道如何创建的细节。这种模式的核心思想是基于一个原型实例,通过复制这个原型来创建新的对象
27 7
|
6天前
|
设计模式 Java
设计模式之原型模式
设计模式之原型模式
|
6天前
|
设计模式 存储 JSON
Java设计模式-原型模式
原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的`Object clone()`就是原型模式的应用。
31 1
Java设计模式-原型模式