淺析php原型模式
原型模式:
用原型實(shí)例指定創(chuàng)建對(duì)象的種類(lèi),并且通過(guò)拷貝這個(gè)原型來(lái)創(chuàng)建新的對(duì)象。
應(yīng)用場(chǎng)景: 類(lèi)的資源非常多、性能和安全要求,一般和工廠方法結(jié)合使用。
<?php
/**
* 原型模式
*/
//聲明一個(gè)克隆自身的接口
interface Prototype {
function copy();
}
//產(chǎn)品要實(shí)現(xiàn)克隆自身的操作
class Student implements Prototype {
//簡(jiǎn)單起見(jiàn),這里沒(méi)有使用get set
public $school;
public $major;
public $name;
public function __construct($school, $major, $name) {
$this->school = $school;
$this->major = $major;
$this->name = $name;
}
public function printInfo() {
printf("%s,%s,%sn", $this->school, $this->major, $this->name);
}
public function copy() {
return clone $this;
}
}
$stu1 = new Student('清華大學(xué)', '計(jì)算機(jī)', '張三');
$stu1->printInfo();
$stu2 = $stu1->copy();
$stu2->name = '李四';
$stu2->printInfo();
?>
這里可以看到,如果類(lèi)的成員變量非常多,如果由外部創(chuàng)建多個(gè)新對(duì)象再一個(gè)個(gè)賦值,則效率不高代碼冗余也容易出錯(cuò),通過(guò)原型拷貝復(fù)制自身再進(jìn)行微小修改就是另一個(gè)新對(duì)象了。
設(shè)計(jì)模式的第一部分,創(chuàng)建型模式就總結(jié)完了。下面還有兩部分結(jié)構(gòu)型設(shè)計(jì)模式和行為型設(shè)計(jì)模式稍后繼續(xù)。
- 學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)原型模式(prototype)
- php設(shè)計(jì)模式 Prototype (原型模式)代碼
- php設(shè)計(jì)模式之原型模式分析【星際爭(zhēng)霸游戲案例】
- PHP設(shè)計(jì)模式之原型模式定義與用法詳解
- php示例詳解Constructor Prototype Pattern 原型模式
- PHP設(shè)計(jì)模式(三)建造者模式Builder實(shí)例詳解【創(chuàng)建型】
- PHP設(shè)計(jì)模式(一)工廠模式Factory實(shí)例詳解【創(chuàng)建型】
- PHP設(shè)計(jì)模式概論【概念、分類(lèi)、原則等】
- PHP設(shè)計(jì)模式之 策略模式Strategy詳解【對(duì)象行為型】
- PHP設(shè)計(jì)模式(四)原型模式Prototype實(shí)例詳解【創(chuàng)建型】
相關(guān)文章
php+croppic.js實(shí)現(xiàn)剪切上傳圖片功能
最近做項(xiàng)目遇到這樣的需求,需要實(shí)現(xiàn)裁剪圖片上傳,接下來(lái)通過(guò)本文給大家分享基于php+croppic.js實(shí)現(xiàn)剪切上傳圖片功能,需要的朋友可以參考下2018-08-08關(guān)于PHP 如何用 curl 讀取 HTTP chunked 數(shù)據(jù)
通過(guò)本文給大家介紹php用curl讀取http chunked數(shù)據(jù)的方法,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-02-02thinkphp5框架擴(kuò)展redis類(lèi)方法示例
這篇文章主要介紹了thinkphp5框架擴(kuò)展redis類(lèi)方法,結(jié)合實(shí)例形式分析了thinkphp5框架擴(kuò)展redis類(lèi)的實(shí)現(xiàn)步驟、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2019-05-05Codeigniter框架的更新事務(wù)(transaction)BUG及解決方法
這篇文章主要介紹了Codeigniter框架的更新事務(wù)(transaction)BUG及解決方法,具體BUG和解決辦法在文中有詳細(xì)描述,需要的朋友可以參考下2014-07-07關(guān)于php微信訂閱號(hào)開(kāi)發(fā)之token驗(yàn)證后自動(dòng)發(fā)送消息給訂閱號(hào)但是沒(méi)有消息返回的問(wèn)題
最近做了個(gè)項(xiàng)目,當(dāng)token驗(yàn)證之后,發(fā)送消息給訂閱號(hào),但是沒(méi)有消息返回,下面小編通過(guò)本篇文章給大家分享我的解決辦法2015-12-12對(duì)于ThinkPHP框架早期版本的一個(gè)SQL注入漏洞詳細(xì)分析
這篇文章主要介紹了對(duì)于ThinkPHP框架早期版本的一個(gè)SQL注入漏洞詳細(xì)分析,對(duì)于網(wǎng)站安全十分重要!需要的朋友可以參考下2014-07-07ThinkPHP 3.2 版本升級(jí)了哪些內(nèi)容
ThinkPHP 3.2發(fā)布了挺長(zhǎng)時(shí)間了,這里也總結(jié)下這次ThinkPHP 3.2到底發(fā)生了哪些變化,方便程序員們進(jìn)行開(kāi)發(fā)。2015-03-03