• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP设计模式之原型设计模式原理与用法分析

    本文实例讲述了PHP设计模式之原型设计模式原理与用法。分享给大家供大家参考,具体如下:

    一、什么是原型设计模式

    原型设计模式使用一种克隆技术来复制实例化的对象,新对象是通过复制原型实例创建的。原型设计模式的目的是通过使用克隆以减少

    实例化对象的开销。

    在原型设计模式中,Client类是不可缺少的一部分。

    PHP有一个内置的克隆方法__clone()可以在设计模式中使用,但是不能直接访问,使用clone关键字即可。克隆不会启动构造函数。

    二、什么时候使用原型设计模式

    如果一个项目要求你创建某个原型对象的多个实例,就可以使用原型设计模式。

    三、原型设计模式实例

    这里以现代企业组织为例:

    ?php
    /**
    *  原型设计模式
    *        以现代企业组织为例
    **/
    //部门抽象类
    abstract class IAcmePrototype
    {
      protected $id;   //员工ID号
      protected $name;  //员工名字
      protected $dept;  //员工部门
      //克隆方法
      abstract function __clone();
      //员工部门设置方法
      abstract function setDept($orgCode);
      //员工部门获取方法
      public function getDept()
      {
        return $this->dept;
      }
      //员工ID号设置方法
      public function setId($id)
      {
        $this->id = $id;
      }
      //员工ID号获取方法
      public function getId()
      {
        return $this->id;
      }
      //员工名字设置方法
      public function setName($name)
      {
        $this->name = $name;
      }
      //员工名字获取方法
      public function getName()
      {
        return $this->name;
      }
    }
    //市场部类
    class Marketing extends IAcmePrototype
    {
      const UNIT = "Marketing";  //标识
      //市场部门类别
      private $sales = "sales";
      private $promotion = "promotion";
      private $strategic = "strategic planning";
      //克隆函数
      function __clone()
      {
      }
      //部门设置函数
      public function setDept($orgCode)
      {
        switch($orgCode)
        {
          case 101:
              $this->dept = $this->sales;
              break;
          case 102:
              $this->dept = $this->promotion;
              break;
          case 103:
              $this->dept = $this->strategic;
              break;
          default:
              $this->dept = "Unrecognized Marketing";
        }
      }
    }
    //管理部类
    class Management extends IAcmePrototype
    {
      const UNIT = "Management";
      private $research = "research";
      private $plan = "planning";
      private $operations = "operations";
      function __clone()
      {
      }
      public function setDept($orgCode)
      {
        switch($orgCode)
        {
          case 201:
              $this->dept = $this->research;
              break;
          case 202:
              $this->dept = $this->plan;
              break;
          case 203:
              $this->dept = $this->operations;
              break;
          default:
              $this->dept = "Unrecognized Marketing";
        }
      }
    }
    //工厂部类
    class Engineering extends IAcmePrototype
    {
      const UNIT = "Engineering";
      private $development = "programming";
      private $design = "digital artwork";
      private $sysAd = "system administration";
      function __clone()
      {
      }
      public function setDept($orgCode)
      {
        switch($orgCode)
        {
          case 301:
              $this->dept = $this->development;
              break;
          case 302:
              $this->dept = $this->design;
              break;
          case 303:
              $this->dept = $this->sysAd;
              break;
          default:
              $this->dept = "Unrecognized Marketing";
        }
      }
    }
    //客户类
    class Client
    {
      private $market;  //市场部类实例
      private $manage;  //管理部类实例
      private $engineer; //工厂部类实例
      //构造函数
      public function __construct()
      {
        $this->makeConProto();
        //市场部类实例克隆
        $Tess = clone $this->market;
        $this->setEmployee($Tess,"Tess Smith",101,"ts101-1234");
        $this->showEmployee($Tess);
        $Jacob = clone $this->market;
        $this->setEmployee($Jacob,"Jacob Jones",102,"jj101-2234");
        $this->showEmployee($Jacob);
        //管理部类实例克隆
        $Ricky = clone $this->manage;
        $this->setEmployee($Ricky,"Ricky Rodrigues",203,"rr203-5634");
        $this->showEmployee($Ricky);
        //工程部类实例克隆
        $Olivia = clone $this->engineer;
        $this->setEmployee($Olivia,"Olivia perez",302,"op302-1278");
        $this->showEmployee($Olivia);
        $John = clone $this->engineer;
        $this->setEmployee($John,"John Jackson",301,"jj301-1454");
        $this->showEmployee($John);
      }
      //实例化部门对象
      private function makeConProto()
      {
        $this->market = new Marketing();
        $this->manage = new Management();
        $this->engineer = new Engineering();
      }
      //员工信息设置方法
      private function setEmployee(IAcmePrototype $employee,$name,$dept,$id)
      {
        $employee->setName($name);
        $employee->setDept($dept);
        $employee->setId($id);
      }
      //员工信息显示方法
      private function showEmployee(IAcmePrototype $employee)
      {
        echo $employee->getName() . 'br />';
        echo $employee->getDept() . 'br />';
        echo $employee->getId() . 'br />';
      }
    }
    $client = new Client();
    ?>

    运行结果:

    Tess Smith
    sales
    ts101-1234
    Jacob Jones
    promotion
    jj101-2234
    Ricky Rodrigues
    operations
    rr203-5634
    Olivia perez
    digital artwork
    op302-1278
    John Jackson
    programming
    jj301-1454

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • php设计模式 Delegation(委托模式)
    • php设计模式之委托模式
    • PHP设计模式之建造者模式定义与用法简单示例
    • PHP设计模式之装饰器模式定义与用法简单示例
    • PHP耦合设计模式实例分析
    • PHP设计模式之观察者模式定义与用法示例
    • PHP设计模式之适配器模式原理与用法分析
    • PHP设计模式之单例模式原理与实现方法分析
    • PHP常用的三种设计模式汇总
    • PHP设计模式之委托模式定义与用法简单示例
    上一篇:PHP设计模式之单例模式原理与实现方法分析
    下一篇:PHP设计模式之适配器模式原理与用法分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    PHP设计模式之原型设计模式原理与用法分析 PHP,设计模式,之,原型,原理,