23种设计模式-原型模式


23种设计模式-原型模式

概述

用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象

结构

原型模式包含如下角色:

  • 抽象原型类:规定了具体原型对象必须实现的clone方法
  • 具体原型类:实现抽象原型类的clone方法,它是可被复制的对象。
  • 访问类:使用具体原型类中的clone方法来复制新的对象

实现

/**
 * 抽象原型类
 */
abstract class Mobile
{
    protected $account;

    abstract public function __clone();

    public function getAccount()
    {
        return $this->account;
    }

    public function setAccount($account)
    {
        $this->account = $account;
    }
}

/**
 * 具体原型类
 */
class Xiaomi14 extends Mobile
{
    public function __clone()
    {
        // TODO: Implement __clone() method.
    }
}

$mobile = new Xiaomi14();
// 设置账户
$mobile->setAccount('ydz');
echo $mobile->getAccount();

// 买了新手机
$newMobile = clone $mobile;
// 看看是谁的账户
echo $newMobile->getAccount();
// 重新设置账户
$newMobile->setAccount('new');
// 看看新手机账户是否修改
echo $newMobile->getAccount();
// 看看旧手机账户
echo $mobile->getAccount();
var_dump($newMobile instanceof  Xiaomi14);

文章作者: 我若为侠
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 我若为侠 !
 上一篇
23种设计模式-建造者模式 23种设计模式-建造者模式
23种设计模式-建造者模式概述将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示 分离了部件的构造和装配。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况 由于实现了构建和装配的解耦。不同的构建器、
下一篇 
23种设计模式-抽象工厂模式 23种设计模式-抽象工厂模式
23种设计模式-抽象工厂模式概述抽象工厂模式是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级产品的模式结构。 产品族可以理解为,笔记本电脑,台式电脑都是电脑,所以他们算的上一个
  目录