單例模式--工廠模式

單例模式又稱為職責模式,它用來在程序中創建一個單一功能的訪問點,通俗地說就是實例化出來的對象是唯一的。
所有的單例模式至少擁有以下三種公共元素:
1. 它們必須擁有一個構造函數,并且必須被標記為private
2. 它們擁有一個保存類的實例的靜態成員變量
3. 它們擁有一個訪問這個實例的公共的靜態方法
單例類不能再其它類中直接實例化,只能被其自身實例化。它不會創建實例副本,而是會向單例類內部存儲的實例返回一個引用。

例子:

復制代碼
 1 class Single {
 2     private $name;//聲明一個私有的實例變量  3 private function __construct(){//聲明私有構造方法為了防止外部代碼使用new來創建對象。  4  5  }  6  7 static public $instance;//聲明一個靜態變量(保存在類中唯一的一個實例)  8 static public function getinstance(){//聲明一個getinstance()靜態方法,用于檢測是否有實例對象  9 if(!self::$instance) self::$instance = new self(); 10 return self::$instance; 11  } 12 13 public function setname($n){ $this->name = $n; } 14 public function getname(){ return $this->name; } 15 } 16 17 18 $oa = Single::getinstance(); 19 $ob = Single::getinstance(); 20 $oa->setname('hello world'); 21 $ob->setname('good morning'); 22 echo $oa->getname();//good morning 23 echo $ob->getname();//good morning
復制代碼

工廠模式就是一種類,具有為您創建對象的某些方法,這樣就可以使用工廠類創建對象,而不直接使用new。這樣如果想更改創建的對象類型,只需更改該工廠即可。

例子:

復制代碼
 1 class Factory {//創建一個基本的工廠類
 2 static public function fac($id){//創建一個返回對象實例的靜態方法  3 if(1 == $id) return new A();  4 elseif(2==$id) return new B();  5 elseif(3==$id) return new C();  6 return new D();  7  }  8 }  9 10 interface FetchName {//創建一個接口 11 public function getname();// 12 } 13 14 class A implements FetchName{ 15 private $name = "AAAAA"; 16 public function getname(){ return $this->name; } 17 } 18 19 class C implements FetchName{ 20 private $name = "CCCCC"; 21 public function getname(){ return $this->name; } 22 } 23 class B implements FetchName{ 24 private $name = "BBBBB"; 25 public function getname(){ return $this->name; } 26 } 27 28 class D implements FetchName{ 29 private $name = "DDDDD"; 30 public function getname(){ return $this->name; } 31 } 32 33 34 $o = Factory::fac(6);//調用工廠類中的方法 35 if($o instanceof FetchName){ 36 echo $o->getname();//DDDDD 37 } 38 39 $p=Factory::fac(3); 40 echo $p->getname();//CCCCC
復制代碼

轉載于:https://www.cnblogs.com/gyrgyr/p/10873497.html

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

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

相關文章

wpfのuri(讓你完全明白wpf的圖片加載方式以及URI寫法)

原文:wpfのuri(讓你完全明白wpf的圖片加載方式以及URI寫法)絕對 pack WPF URI pack://application:,,,/是協議;“,,,”是“///”的變體 1.資源文件 — 本地程序集 Uri uri new Uri("pack://applicati…

Mac OS使用技巧十七:豐富多彩的花哨輸入法

OSX Mavericks中的漢字輸入功能,絲毫不遜色于windows,甚至提供了強大的手寫輸入功能和語音輸入功能,并且發展到現在,已經有很多種第三方輸入法支持Mac了。 一、基本的輸入法首先說一下支持Mac的各種中文輸入法,其實我覺…

語言-漢語:漢語

ylbtech-語言-漢語:漢語漢語,即漢族的傳統語言,是中國通用語言,國際通用語言之一,屬漢藏語系,與藏語、壯語、侗語、黎語、彝語、苗語、瑤語等都是親屬語言。漢語歷史悠久,使用人數最多&#xff…

Duboo入門示例(Idea開發環境)

在學習Dubbo分布式框架時的官方入門例子,很有代表性。簡單清晰。 有關Dubbo的概念、概述和簡單的配置文件,可以看官方文檔的簡述 會很快對Duboo有個整體的概念。 準備工作: 下載示例,點擊這里下載,建議用git管理。下載注冊中心&am…

Mac OS使用技巧十八:Safari碉堡功能之一制作Widget

Safari的使用大家應該自己摸索就可以慢慢駕輕就熟,畢竟再高端也是個瀏覽器,從開始上網就要一直使用瀏覽器,Safari只是眾多瀏覽器中的一個比較強大的罷了。下面給大家介紹一下Safari的一個碉堡隱藏功能!!!!(其實不算隱藏啦。。。在…

CentOS 6.5 部署WordPress

1、安裝環境: #yum install httpd mysql-server php php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc -y 2、配置mysql初始化密碼: #mysqladmin -u root password ********** 2.1、mysql新建一個wordpress的表: create database wordpress; 3、啟動服…

BZOJ1562: [NOI2009]變換序列(二分圖 匈牙利)

Description Input Output Sample Input 5 1 1 2 2 1Sample Output 1 2 4 0 3HINT 30%的數據中N≤50;60%的數據中N≤500;100%的數據中N≤10000。 Source 這題是二分圖應該不難看出來。 對于原序列中的一個點,對應兩個可匹配的點。 關鍵是怎么…

Mac OS使用技巧十九:Safari碉堡功能之二查看網頁源碼

因為大三下的時候選修了搜索技術,了解了網絡上搜索引擎和網絡爬蟲的信息扒取的一些東西,后來我們做了一個比較水的東西,就是只扒取了幾家較大的下載網站幾十個軟件的評分下載量等信息,當用戶輸入一個程序名稱,我們會根…

python文件打包發布(引用的包也可以加進來),打包出錯解決了,運行出錯解決了...

一開始,我以為,打包本來就很容易,可是沒有。。。。。 沒想到打包還能遇到坑 T.T 打包步驟: 1、安裝 pyinstaller (cmd) pip install pyinstaller 2、進入目標文件所在文件夾,右鍵在此打開cmd py…

博客暫停通知-------10.1~11.24

博主在10月初到11月24號之間有對自己來說十分十分重要的事情,可以說是會影響我人生走向的事情。 所以我做出暫停更文章和回復的決定,這期間我基本不會來博客看了,希望如果留言未收到回復的博友或者吧友見諒。 我在貼吧發的一些帖子也暫時不會…

RabbitMQ系列(二)深入了解RabbitMQ工作原理及簡單使用

RabbitMQ簡介 在介紹RabbitMQ之前實現要介紹一下MQ,MQ是什么? MQ全稱是Message Queue,可以理解為消息隊列的意思,簡單來說就是消息以管道的方式進行傳遞。 RabbitMQ是一個實現了AMQP(Advanced Message Queuing Protoco…

四葉草社交平臺——十天沖刺(10)

姑且就這樣了,找了個新模板,這個模板先用來過關吧。轉載于:https://www.cnblogs.com/limitCM/p/10925208.html

虛擬機(Visual Machine)的云平臺的自動伸縮擴容(auto-scaling)技術

云計算平臺中允許客戶依據應用的負載進行云計算資源的彈性動態伸縮(理想的情況是實現一個用多少付費多少的模型,最大限度地降低用戶的運營成本) 在進行討論之前,先對幾個名詞進行定義 1)客戶:使用云服務的人…

Unity 3D學習筆記之一 界面介紹

因為學校的課程,本學期對Unity 3D有學習的要求,在博客中記錄下自己的Unity學習之路(內容摘錄自書本和視頻,書本為Unity 4.x從入門到精通)一、Unity界面介紹首先進入Unity3D,在菜單欄,File中new …

Python 獲得程序 exe 的版本號

Python 獲得程序 exe 的版本號 python中需要安裝 pywin32 包 # based on http://stackoverflow.com/questions/580924/python-windows-file-version-attribute from win32com.client import Dispatchdef get_version_via_com(filename):parser Dispatch("Scripting.FileS…

Coding and Paper Letter(一)

2019獨角獸企業重金招聘Python工程師標準>>> 最近發現需要在快速閱讀背景下,對快餐式資源做整理與收集。以Coding(以Github)和Paper(自己看到的一些論文,論文一般主要看題目和摘要做些簡單小結)…

MacBook刷機勘錯篇

前一段時間突然發現自己的MacBook已經好久沒有刷過系統了,10.9用著還好,但bootcamp裝的win8.1越來越卡,越用越慢。想要重做一下雙系統,后來就演變成了兩個系統一起更新,再后來就演變成了一個慘案。因為自己一直也沒有使…

字典、列表、元組

1 字典2 Python內置的字典數據類型:全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度3 4 當將key-value放進dict時,dict會根據key算出value要存放地址&#…

Sublime Text怎么快速建立一個html5頁面模板

在編輯器中輸入一個半角英文的感嘆號(!),然后按下TAB鍵

Mac OS X 10.10更新及體驗

前一陣子,更新了Mac OS 10.10 Yosemite,總體用起來感覺還是很不錯的,是很值得升級,相對于10.9 Mavericks優化了不少東西。我之前寫的使用教程有一些也就不適用了;比如更換Dashboard中的背景,10.10中Dashboa…