国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php設(shè)計模式是什么,該如何理解

2024-09-04 11:43:40
字體:
供稿:網(wǎng)友

做程序開發(fā)的朋友應(yīng)該都聽說過設(shè)計模式這個詞,對于做java開發(fā)的,應(yīng)該一聽到這個詞就明白是什么意思,但對于做PHP的朋友來說,往往越看越迷糊,那到底什么是設(shè)計模式呢?其實作者也不懂,下面是從網(wǎng)上摘抄的關(guān)于設(shè)計模式的一些解釋,期待能夠有一些理解.

php設(shè)計模式有如下:

備忘錄模式(Memento模式)

觀察者模式(Observer模式)

模板方法模式(Template Method模式)

命令模式(command模式)

合成模式(composite模式)

享元模式(flyweight模式)

策略模式(strategy模式)

狀態(tài)模式(state模式)

適配器模式(adapter模式)

工廠方法模式(factory method模式)

原型模式(prototype模式)

門面模式(facade模式)

單例模式(singleton模式)

橋梁模式(bridge模式)

裝飾器模式(decorator模式)

抽象工廠模式(abstract factory模式)

建造者模式(Builder模式)

訪問者模式(Visitor模式)

當(dāng)你在不斷的試圖從你的應(yīng)用程序中發(fā)現(xiàn)新的特征時,你是否發(fā)現(xiàn)你提出的解決方法和一些以前你已經(jīng)實現(xiàn)的東西是如此的類似呢?如果你是一個程序員(即使你才開始很短的時間),你都可能回答“是”,這看起來就是你使用了一些以前的代碼來解決軟件開發(fā)過程中新發(fā)現(xiàn)的問題了,你可能已經(jīng)認識到:你的解決方法是基本原理,是一個不僅僅是你而且是所有專業(yè)開發(fā)者都能廣泛重復(fù)應(yīng)用的方法.

事實上,許多程序問題都不斷的反復(fù)的遇到,而且許多用來解決這些問題的基本方法(或者說是設(shè)計模式)都已經(jīng)浮現(xiàn)出來,設(shè)計模式就是一個教你如何利用真實可靠的設(shè)計來組織你的代碼的模板.

設(shè)計模式歷史

“設(shè)計模式”這個術(shù)語最初被設(shè)計用于建筑學(xué)領(lǐng)域,Christopher Alexander 在他1977的著作“A Pattern Language:Towns/Building/Construction”里面描述了一些常見的建筑學(xué)設(shè)計問題,并解釋了如何用這些已有的,著名的模式集合來開始全新的有效的設(shè)計,Alexander的觀點被很好的轉(zhuǎn)化到軟件開發(fā)上來,并且長期的用原有的組件來構(gòu)造新的解決方案.

所有的設(shè)計模式都有一些常用的特性:一個標識(a name),一個問題陳述(a problem statement)和一個解決方案(a solution).

1、一個設(shè)計模式的標識是重要的,因為它會讓其他的程序員不用進行太深入的學(xué)習(xí)就能立刻理解你的代碼的目的(至少通過這個標識程序員會很熟悉這個模式)。

2、問題描述是用來說明這個模式的應(yīng)用的領(lǐng)域。

3、解決方案描述了這個模型的執(zhí)行。一個好的設(shè)計模式的論述應(yīng)該覆蓋使用這個模型的優(yōu)點和缺點。

一個模式是解決特定問題的有效方法。一個設(shè)計模式不是一個庫(能在你的項目中直接包含和使用的代碼庫)而是一個用來組織你的代碼的模板。事實上,一個代碼庫和一個設(shè)計模式在應(yīng)用上是有很多不同的。

比如,你從店鋪里面買的一件襯衫是一個代碼庫,它的顏色,樣式和大小都由設(shè)計師和廠商決定,但它滿足了你的需求。然而,如果店里面沒有什么衣服適合你,那你就能自己創(chuàng)建自己的襯衫(設(shè)計它的形狀,選擇布料,然后裁縫在一起)。但是如果你不是一個裁縫,你可能會發(fā)現(xiàn)自己很容易的去找一個合適的模式然后按著這個模式去設(shè)計自己的襯衫。使用一個模型,你可以在更少的時間內(nèi)得到一個熟練設(shè)計的襯衫。

回到討論軟件上來,一個數(shù)據(jù)提取層或者一個CMS(content management system)就是一個庫,它是先前設(shè)計好而且已經(jīng)編碼好了的,如果它能準確的滿足你的需要那它就是一個好的選擇。

工廠模式

工廠模式(Factory)允許你在代碼執(zhí)行時實例化對象,它之所以被稱為工廠模式是因為它負責(zé)“生產(chǎn)”對象,工廠方法的參數(shù)是 你要生成的對象對應(yīng)的類名稱.

代碼如下:Example #1 調(diào)用工廠方法(帶參數(shù))

  1. <?php 
  2. class Example 
  3.     // The parameterized factory method 
  4.     public static function factory($type
  5.     { 
  6.         if (include_once 'Drivers/' . $type . '.php') { 
  7.             $classname = 'Driver_' . $type
  8.             return new $classname
  9.         } else { 
  10.             throw new Exception ('Driver not found'); 
  11.         } 
  12.     } 
  13. ?> 

按上面的方式可以動態(tài)加載drivers,如果Example類是一個數(shù)據(jù)庫抽象類,那么 可以這樣來生成MySQL和 SQLite驅(qū)動對象:

  1. <?php 
  2. // Load a MySQL Driver 
  3. $mysql = Example::factory('MySQL');
  4. // Load a SQLite Driver 
  5. $sqlite = Example::factory('SQLite');
  6. ?> 

單例:單例模式(Singleton)用于為一個類生成一個唯一的對象,最常用的地方是數(shù)據(jù)庫連接,使用單例模式生成一個對象后,該對象可以被其它眾多對象所使用.

Example #2 單例模式

  1. <?php 
  2. class Example 
  3.     // 保存類實例在此屬性中 
  4.     private static $instance
  5.        // 構(gòu)造方法聲明為private,防止直接創(chuàng)建對象 
  6.     private function __construct()  
  7.     { 
  8.         echo 'I am constructed'
  9.     }
  10.     // singleton 方法 
  11.     public static function singleton()  
  12.     { 
  13.         if (!isset(self::$instance)) { 
  14.             $c = __CLASS__
  15.             self::$instance = new $c
  16.         } 
  17.         return self::$instance
  18.     } 
  19.     // Example類中的普通方法 
  20.     public function bark() 
  21.     { 
  22.         echo 'Woof!'
  23.     } 
  24.     // 阻止用戶復(fù)制對象實例 
  25.     public function __clone() 
  26.     { 
  27.         trigger_error('Clone is not allowed.', E_USER_ERROR); 
  28.     } 
  29. ?> 

這樣我們可以得到一個獨一無二的Example類的對象.

  1. <?php 
  2. // 這個寫法會出錯,因為構(gòu)造方法被聲明為private 
  3. $test = new Example; 
  4. // 下面將得到Example類的單例對象 
  5. $test = Example::singleton(); 
  6. $test->bark(); 
  7. // 復(fù)制對象將導(dǎo)致一個E_USER_ERROR. 
  8. $test_clone = clone $test
  9. ?> 

最后一個想法:就象一個裁縫模型,一個設(shè)計本身而言是沒有什么用處的,畢竟,你不可能穿一個服裝模型,它僅僅是由很薄的紙拼湊起來的,類似的,一個軟件設(shè)計模型也僅僅只是一個引導(dǎo),它必須根據(jù)程序設(shè)計語言和你的應(yīng)用程序的特點和要求而特別的設(shè)計.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南江县| 吴桥县| 莎车县| 伊宁县| 即墨市| 白山市| 西乌珠穆沁旗| 甘孜县| 丰都县| 五莲县| 龙南县| 泗洪县| 昆山市| 宜君县| 伊金霍洛旗| 西平县| 本溪| 霍州市| 垦利县| 九龙坡区| 花莲市| 东丽区| 桃园市| 兰州市| 筠连县| 武穴市| 明水县| 黑山县| 绥滨县| 灵川县| 五台县| 江城| 普安县| 丰镇市| 隆回县| 类乌齐县| 长岛县| 南京市| 普陀区| 潞西市| 城口县|