php設計模式原型模式,原型模式_設計模式_設計模式之原型模式 - Lane Blog

10

8

Clicks: 6614 Date: 2014-04-21 21:48:35 Power By 李軒Lane

原型模式提取重復功能,避免了程序員喜歡復制粘貼的壞習慣。設計模式中的原型模式就是,用原型實例指定創建對象的重力,通過拷貝這些原型來創建新的對象從一個對象再創建另外一個可定制的對象,而且不需要知道創建的任何細節。

淺復制 VS 深復制:

淺復制是對數字,字符串等類型進行傳值復制,而對對象來講是引用復制,即只是對內存地址進行賦值而不是新建一個對象的變量。在淺復制中,對一個對象的屬性改變,另一個對象的該屬性也會被改變,類比于C語言的指針,PHP在調用方法時&$var的傳遞。

以PHP為代碼環境。

//家庭類

class Home{

public $money;

public function __construct($money){

$this->money = $money;

}

}

//家庭成員類

class member{

public $id;

public $name;

public $obj;

public function __construct($id, $name, Home $obj){

$this->setId($id);

$this->setName($name);

$this->obj = $obj;

}

public function setId($id){

$this->id = $id;

}

public function setName($name){

$this->name = $name;

}

public function display(){

echo 'ID為' . $this->id . ',名稱為' . $this->name . ',資產為' . $this->obj->money . '
';

}

public function __clone(){

//深度復制(克隆),因為克隆只能克隆數字,字符串等,對對象變量是引用傳值。

$this->obj = clone $this->obj;

}

}

//客戶端/接口

$obj1 = new member(1, '小軒', new Home('10000'));

$obj1->display();

$obj2 = clone $obj1;

$obj2->setId(2);

$obj2->setName('小瑋');

$obj2->obj->money = 2000;

$obj2->display();

//根據這句輸出可以看到,對象1和對象2值是不一樣的,刪掉上面的注釋部分再看,又是一樣的了,這就是深復制和淺復制。

$obj1->display();

?>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538841.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538841.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538841.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows2003如何安裝IIS和ftp

【開始】----【控制面板】----【添加或刪除程序】 出現如下“添加或刪除程序”界面,點擊“添加/刪除windows組件(a) ” 出現如下“window組件向導”界面 下拉“組件”欄目條,選擇“應用程序服務器” 點擊“應用程序服務器”下的“…

hadoop臨時文件 jar包_hadoop之Mapper/reducer源碼分析之二

若當前JobClient (0.22 hadoop) 運行在YARN.則job提交任務運行在YARNRunnerHadoop Yarn 框架原理及運作機制主要步驟作業提交作業初始化資源申請與任務分配任務執行具體步驟在運行作業之前,Resource Manager和Node Manager都已經啟動,所以在上圖中&#…

ANDROID:SHOWASACTION="NEVER"是做什么用的?

原文地址:http://www.cnblogs.com/android-joker/p/4478491.html 點擊閱讀原文 --------------------------------------------------------- 安卓開發項目文件中有一個目錄叫做menu,里面有tybmain.xml item選項里有一句 android:showAsAction "…

吳恩達ex3_Wu-Enda機器學習編程作業Python實現EX3,吳恩達,machinelearning,python,ex3nn

# -*- coding: utf-8 -*-"""Created on Wed Jul 1 20:28:57 2020author: cheetah023"""import numpy as npimport matplotlib.pyplot as pltimport scipy.io as sciimport random as ra#函數定義def sigmoid(X):return 1 /(1 np.exp(-X))def pr…

php數組驗證用戶名密碼,求個php數組驗證問題,在線等

現在有這么一個數組,是屬性表Array([0] > Array([list_attr_id] > 30[list_attr_name] > 顏色[list_attr_attr] > 黑色|白色|金色[list_attr_price] > 0|10.1|20[list_attr_shop_id] > 28)[1] > Array([list_attr_id] > 31[list_attr_name] > 規格[…

基于python的視頻監控系統_Python實現微信監控報警系統

概述: 本文主要分享一下博主在學習wxpy 的過程中開發的一個小程序。博主在最近有一個監控報警的需求需要完成,然后剛好在學習wxpy 這個東西,因此很巧妙的將工作和學習聯系在一起。 博文中主要使用到的技術設計到Python,Redis,以及…

python 編碼文件json.loads json.dumps

python 編碼文件json.loads json.dumps import yaml d {name: 張三, age: 1} print d jd json.dumps(d, ensure_asciiFalse, encodingutf-8)) ud json.loads(jd, encodingutf-8) print ud ud yaml.safe_load(jd, encodingutf-8) print udposted on 2018-04-23 15:18 秦瑞It…

getActionBar()報空指針異常

調用 getActionBar()的Activity類 public class WlanListActivity extends AppCompatActivity 在使用getActionBar("標題內容")的時候報空指針。 原因是要用AppCompatActivity類里的getSupportActionBar()

python 類中定義列表_Python3中的自定義列表類,具有

我想用python3編寫一個自定義列表類,就像在這個問題How would I create a custom list class in python?中一樣,但與該問題不同,我想實現__get__和{}方法。雖然我的類與list類似,但是這些方法背后隱藏著一些神奇的操作。所以我想…

紅黑樹與平衡二叉樹_百圖詳解紅黑樹,想不理解都難

之前在公司組內分享了紅黑樹的工作原理,今天把它整理下發出來,希望能對大家有所幫助,對自己也算是一個知識點的總結。這篇文章算是我寫博客寫公眾號以來畫圖最多的一篇文章了,沒有之一,我希望盡可能多地用圖片來形象地…

linux 父子進程結束,Linux下讓父進程結束后,子進程自動結束

在多進程編程的時候,經常會遇到這樣的情況。父進程創建了一堆子進程,當遇到錯誤或者操作失誤的時候把父進程關閉了,但是子進程還在跑,不得不一個一個地殺死子進程,或者使用ps,grep,awk,kill來配合批量殺死。之前在寫 x…

android:showAsAction 無效

我想要的效果 但actionbar上的搜索菜單不顯示 在androidstudio里,android:showAsAction"always"標紅 根據提示,需要加入 xmlns:app"http://schemas.android.com/apk/res-auto" 加入后依然無效 正確的加入方式是:

Exchange_Server_2013在Windows_2008_R2部署

Exchange Server 2013可以部署在Windows Server 2012的平臺,也可以部署在Windows Server 2008 R2的平臺。如果部署在Windows Server 2008 R2平臺要求操作系統版本為Windows Server 2008 R2 SP1的版本。如下拓撲圖:在本架構中有兩臺服務器,都安…

建立副本名稱沖突_包的建立(一)

這次的內容,涉及到 R 語言包的建立。事實上,CRAN 提供的官方參考指南,并不適合快速閱讀,且內容繁雜。比較適合作為后期提高的 教材。而 http://r-pkgs.had.co.nz/ 上 的教程則更適合作為 R 包編寫的幫助指南。這里,僅僅…

Android 多選列表

原文&#xff1a;http://blog.csdn.net/wljun739/article/details/37655209 點擊閱讀原文 ----------------------------------------------------------- 1、activity_main.xml[java] view plaincopy<LinearLayout xmlns:android"http://schemas.android.com/apk/res/…

python自帶的編輯器怎么換行_Python3基礎 print 自帶換行功能

鎮場詩&#xff1a; ———大夢誰覺&#xff0c;水月中建博客。百千磨難&#xff0c;才知世事無常。 ———今持佛語&#xff0c;技術無量愿學。愿盡所學&#xff0c;鑄一良心博客。 —————————————————————————————————————————— 1 …

查看db2數據庫名linux,【名說】DB2數據庫備份與恢復(linux環境)

lslinux 下備份db2數據庫1.SSH方式&#xff1a;登錄db2數據庫(因為是linux環境 &#xff0c; putty就不錯)2.進入備份文件夾&#xff1a;cd /home/backup/db2 list application | grep 數據庫名//(可能會有一些連接進程&#xff0c;有則全部殺掉)//殺進程&#xff1a;db2 "…

leetcode 回文數

2019獨角獸企業重金招聘Python工程師標準>>> 判斷一個整數是否是回文數。回文數是指正序&#xff08;從左向右&#xff09;和倒序&#xff08;從右向左&#xff09;讀都是一樣的整數。 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向右…

安裝ae顯示安裝程序無法初始化_adobe CC 2015/2017安裝失敗(adobe cc安裝不了的解決辦法)...

adobe CC 2015/2017安裝失敗(adobe cc安裝不了的解決辦法)書法字體2015.06.18Adobe Application ManagerAdobe Creative Cloud 2015/2017全系統軟件已經可以從官網下載了&#xff0c;相信又將有一大波設計師會更新安裝adobe CC 2015/2017軟件。本著嘗鮮的精神&#xff0c;本人也…

Hadoop控制輸出文件命名

原文地址&#xff1a;http://blog.csdn.net/zuochanxiaoheshang/article/details/8769198 點擊閱讀原文 --------------------------------------------------- Hadoop 控制輸出文件命名 在一般情況下&#xff0c;Hadoop 每一個 Reducer 產生一個輸出文件&#xff0c;文件以 …