php設計模式領域博主,php常見設計模式和用途

本文目錄一覽:

PHP設計模式有哪些

1.工廠模式

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

2.單元素模式

某些應用程序資源是獨佔的,因為有且只有一個此類型的資源。例如,通過數據庫句柄到數據庫的連接是獨佔的。您希望在應用程序中共享數據庫句柄,因為在保持連接打開或關閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。

3.觀察者模式

觀察者模式為您提供了避免組件之間緊密耦合的另一種方法。該模式非常簡單:一個對象通過添加一個方法(該方法允許另一個對象,即觀察者 註冊自己)使本身變得可觀察。當可觀察的對象更改時,它會將消息發送到已註冊的觀察者。這些觀察者使用該信息執行的操作與可觀察的對象無關。結果是對象可 以相互對話,而不必了解原因。

4.命令鏈模式

命令鏈 模式以鬆散耦合主題為基礎,發送消息、命令和請求,或通過一組處理程序發送任意內容。每個處理程序都會自行判斷自己能否處理請求。如果可以,該請求被處理,進程停止。您可以為系統添加或移除處理程序,而不影響其他處理程序。

5.策略模式

我們講述的最後一個設計模式是策略 模式。在此模式中,算法是從複雜類提取的,因而可以方便地替換。例如,如果要更改搜索引擎中排列頁的方法,則策略模式是一個不錯的選擇。思考一下搜索引擎 的幾個部分 —— 一部分遍歷頁面,一部分對每頁排列,另一部分基於排列的結果排序。在複雜的示例中,這些部分都在同一個類中。通過使用策略模式,您可將排列部分放入另一個 類中,以便更改頁排列的方式,而不影響搜索引擎的其餘代碼。

怎麼理解php中的設計模式

1、單例模式:PHP中的對象生存期間是從該腳本開始一直到該腳本結束為止,因此PHP的單例模式只是在一個頁面中(這裡可能包含很多其他頁面,不是狹義的單頁面)多次用到該對象時才會起作用,多次用到時不去重複的new對象(多個人做一個項目時,難免會碰到一次請求中多次實例一個對象的情況),將不會耗費不必要的資源(數據控連接操做效果很明顯),還有一點就是可以保證整個腳本中都是同一個對象,這種模式是怎麼實現的呢,他的實現有幾個要注意的點:

a. 首先就是要將__construct()方法定義為私有方法,這樣就不能通過new來得到一個新的實例了,單例模式不能在外部進行實例化,這能字自身內部進行實例化;

PHP有哪幾種設計模式?

PHP 一般有五種常見的設計模式

工廠模式

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

例如:

?php

interface IUser

{

function getName();

}

class User implements IUser

{

public function __construct( $id ) { }

public function getName()

{

return “Jack”;

}

}

class UserFactory

{

public static function Create( $id )

{

return new User( $id );

}

}

$uo = UserFactory::Create( 1 );

echo( $uo-getName().”\n” );

?

單元素模式

某些應用程序資源是獨佔的,因為有且只有一個此類型的資源。例如,通過數據庫句柄到數據庫的連接是獨佔的。您希望在應用程序中共享數據庫句柄,因為在保持連接打開或關閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。

單元素模式可以滿足此要求。如果應用程序每次包含且僅包含一個對象,那麼這個對象就是一個單元素(Singleton)。

例如:

?php

require_once(“DB.php”);

class DatabaseConnection

{

public static function get()

{

static $db = null;

if ( $db == null )

$db = new DatabaseConnection();

return $db;

}

private $_handle = null;

private function __construct()

{

$dsn = ‘mysql://root:password@localhost/photos’;

$this-_handle = DB::Connect( $dsn, array() );

}

public function handle()

{

return $this-_handle;

}

}

print( “Handle = “.DatabaseConnection::get()-handle().”\n” );

print( “Handle = “.DatabaseConnection::get()-handle().”\n” );

?

觀察者模式

觀察者模式為您提供了避免組件之間緊密耦合的另一種方法。該模式非常簡單:一個對象通過添加一個方法(該方法允許另一個對象,即觀察者 註冊自己)使本身變得可觀察。當可觀察的對象更改時,它會將消息發送到已註冊的觀察者。這些觀察者使用該信息執行的操作與可觀察的對象無關。結果是對象可以相互對話,而不必了解原因。

例如:

?php

interface IObserver

{

function onChanged( $sender, $args );

}

interface IObservable

{

function addObserver( $observer );

}

class UserList implements IObservable

{

private $_observers = array();

public function addCustomer( $name )

{

foreach( $this-_observers as $obs )

$obs-onChanged( $this, $name );

}

public function addObserver( $observer )

{

$this-_observers []= $observer;

}

}

class UserListLogger implements IObserver

{

public function onChanged( $sender, $args )

{

echo( “‘$args’ added to user list\n” );

}

}

$ul = new UserList();

$ul-addObserver( new UserListLogger() );

$ul-addCustomer( “Jack” );

?

命令鏈模式

命令鏈 模式以鬆散耦合主題為基礎,發送消息、命令和請求,或通過一組處理程序發送任意內容。每個處理程序都會自行判斷自己能否處理請求。如果可以,該請求被處理,進程停止。您可以為系統添加或移除處理程序,而不影響其他處理程序。

例如:

?php

interface ICommand

{

function onCommand( $name, $args );

}

class CommandChain

{

private $_commands = array();

public function addCommand( $cmd )

{

$this-_commands []= $cmd;

}

public function runCommand( $name, $args )

{

foreach( $this-_commands as $cmd )

{

if ( $cmd-onCommand( $name, $args ) )

return;

}

}

}

class UserCommand implements ICommand

{

public function onCommand( $name, $args )

{

if ( $name != ‘addUser’ ) return false;

echo( “UserCommand handling ‘addUser’\n” );

return true;

}

}

class MailCommand implements ICommand

{

public function onCommand( $name, $args )

{

if ( $name != ‘mail’ ) return false;

echo( “MailCommand handling ‘mail’\n” );

return true;

}

}

$cc = new CommandChain();

$cc-addCommand( new UserCommand() );

$cc-addCommand( new MailCommand() );

$cc-runCommand( ‘addUser’, null );

$cc-runCommand( ‘mail’, null );

?

策略模式

我們講述的最後一個設計模式是策略 模式。在此模式中,算法是從複雜類提取的,因而可以方便地替換。例如,如果要更改搜索引擎中排列頁的方法,則策略模式是一個不錯的選擇。思考一下搜索引擎的幾個部分 —— 一部分遍歷頁面,一部分對每頁排列,另一部分基於排列的結果排序。在複雜的示例中,這些部分都在同一個類中。通過使用策略模式,您可將排列部分放入另一個類中,以便更改頁排列的方式,而不影響搜索引擎的其餘代碼。

例如:

?php

interface IStrategy

{

function filter( $record );

}

class FindAfterStrategy implements IStrategy

{

private $_name;

public function __construct( $name )

{

$this-_name = $name;

}

public function filter( $record )

{

return strcmp( $this-_name, $record ) = 0;

}

}

class RandomStrategy implements IStrategy

{

public function filter( $record )

{

return rand( 0, 1 ) = 0.5;

}

}

class UserList

{

private $_list = array();

public function __construct( $names )

{

if ( $names != null )

{

foreach( $names as $name )

{

$this-_list []= $name;

}

}

}

public function add( $name )

{

$this-_list []= $name;

}

public function find( $filter )

{

$recs = array();

foreach( $this-_list as $user )

{

if ( $filter-filter( $user ) )

$recs []= $user;

}

return $recs;

}

}

$ul = new UserList( array( “Andy”, “Jack”, “Lori”, “Megan” ) );

$f1 = $ul-find( new FindAfterStrategy( “J” ) );

print_r( $f1 );

$f2 = $ul-find( new RandomStrategy() );

print_r( $f2 );

?

php中有哪些設計模式,舉例說明應用場景

PHP 一般有五種常見的設計模式

工廠模式

它具有創建對象的某些方法。可以使用工廠類創建對象,而不直接使用 new。

例如:

?php

interface IUser

{

function getName();

}

class User implements IUser

{

public function __construct( $id ) { }

public function getName()

{

return “Jack”;

}

}

class UserFactory

{

public static function Create( $id )

{

return new User( $id );

}

}

$uo = UserFactory::Create( 1 );

echo( $uo-getName().”\n” );

?

另外四種是:觀察者模式,單元素模式,命令鏈模式,策略模式。例子可以百度一搜。

原創文章,作者:ACNDX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/329183.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ACNDX的頭像ACNDX
上一篇 2025-01-14 18:55
下一篇 2025-01-14 18:55

相關推薦

  • Python在化學領域的應用

    Python作為一種強大的編程語言,其應用已經遍布各個領域,包括了化學。在化學研究中,Python不僅可以完成數據處理和可視化等任務,還可以幫助化學家們進行計算、建模和仿真等工作。…

    編程 2025-04-29
  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28
  • 異或什麼意思及其用途

    異或操作是一種比較常見的位運算操作,也稱為「異或運算」,這個運算符用符號「^」表示。它是指對兩個相應位進行邏輯異或,並返回結果。 我們來看下異或的運算規則: 0 ^ 0 = 0 0…

    編程 2025-04-28
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • Python常見異常類型解析

    本文將闡述Python常見異常類型,包括其定義、分類及處理方法。 一、語法錯誤 語法錯誤是指在Python代碼編寫過程中出現的錯誤,這是一種最常見的錯誤類型。當Python解釋器無…

    編程 2025-04-27
  • 顯示C++設計模式

    本文將詳細介紹顯示C++設計模式的概念、類型、優點和代碼實現。 一、概念 C++設計模式是在軟件設計階段定義,用於處理常見問題的可重用解決方案。這些解決方案是經過測試和驗證的,並已…

    編程 2025-04-27
  • Centos7進入單用戶模式的解釋

    本文將介紹如何在Centos7中進入單用戶模式,並從以下幾個方面進行詳細的闡述。 一、Centos7進入單用戶模式的解答 在Centos7中進入單用戶模式需要執行以下步驟: 1. …

    編程 2025-04-27
  • 如何提高自己在編程領域的技能水平

    作為一個編程開發工程師,在不斷學習、提高自己的技能水平是必不可少的。本文將從多個方面,分享一些提高編程技能的方法和建議。 一、積累實踐經驗 編程領域是一個需要經驗積累的領域。可以通…

    編程 2025-04-27
  • Python在汽車領域的應用

    Python作為一種高級編程語言,其強大的數據分析能力和豐富的開源庫使其在各個行業得到了廣泛的應用。在汽車領域,Python也逐漸成為一個非常有價值的工具,可以用於汽車領域中的大量…

    編程 2025-04-25
  • Grep 精準匹配:探究匹配原理和常見應用

    一、什麼是 Grep 精準匹配 Grep 是一款在 Linux 系統下常用的文本搜索和處理工具,精準匹配是它最常用的一個功能。Grep 精準匹配是指在一個文本文件中查找與指定模式完…

    編程 2025-04-25

發表回復

登錄後才能評論