一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP設計模式之原型設計模式原理與用法分析

PHP設計模式之原型設計模式原理與用法分析

2019-10-11 11:15編程人,在天涯 PHP教程

這篇文章主要介紹了PHP設計模式之原型設計模式,簡單描述了原型設計模式的概念、原理并結合實例形式分析了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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 嗯啊好大视频 | 猫咪免费人成网站在线观看入口 | 青草热久精品视频在线观看 | 国产三级精品91三级在专区 | 免费在线视频成人 | heyzo在线播放 | 精品亚洲永久免费精品 | www.麻豆| 国产亚洲欧美在线中文bt天堂网 | 四虎影院新地址 | daring国家队在线观看樱花动漫 | 欧美日韩国产成人综合在线影院 | 91桃色视频在线观看 | 久久伊人久久 | 亚洲欧美韩国日产综合在线 | 欧美1| 韩国久久精品 | 久久这里只有精品无码3D | 免费大片a一级一级 | 国内自拍网红在综合图区 | 日本高清中文字幕 | 色天天综合色天天碰 | 青草午夜精品视频在线观看 | 美国美女hd18| 日本天堂影院在线播放 | 精品老司机在线视频香蕉 | 国产免费久久精品44 | 欧美精品国产一区二区 | 亚洲一区二区三区福利在线 | 手机跑分排行最新排名 | 国产精品2| 男神插曲女生动漫完整版动漫 | 99久久精品国产综合一区 | 大陆男男gayxxxxvideo | 干处女| 欧美日韩高清一区 | 全日爱韩国视频在线观看 | 国内精品哆啪啪 | 国内精品久久久久香蕉 | 国产精品女同久久免费观看 | 任我鲁精品视频精品 |