PHP設計模式(5)策略模式

2021-09-03 09:29:26 字數 1417 閱讀 2476

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

作為乙個較簡單的示例,清單顯示了乙個使用者列表類,它提供了乙個根據一組即插即用的策略查詢一組使用者的方法。

<?php 

//策略介面

inte***ce istrategy

//定義一種策略繼承介面

class findafterstrategy implements istrategy

public function filter( $record )

}//定義另一種策略

class randomstrategy implements istrategy

}//定義使用者列表類

class userlist}}

public function add( $name )

//根據某個策略來獲取使用者

public function find( $filter )

return $recs;}}

//初始化使用者列表

$ul = new userlist( array( "andy", "jack", "lori", "megan" ) );

//根據第乙個策略獲取使用者

$f1 = $ul->find( new findafterstrategy( "j" ) );

echo '';

print_r( $f1 );

echo '

';

//根據第二個策略獲取使用者

$f2 = $ul->find( new randomstrategy() );

echo '

';

print_r( $f2 );

echo '

';

userlist類是打包名稱陣列的乙個包裝器。它實現find方法,該方法利用幾個策略之一來選擇這些名稱的子集。這些策略由istrategy介面定義,該介面有兩個實現:乙個隨機選擇使用者,另乙個根據指定名稱選擇其後的所有名稱。執行測試**時,將得到以下輸出:

測試**為兩個策略執行同一使用者列表,並顯示結果。在第一種情況中,策略查詢排列在j後的任何名稱,所以您將得到 jack、lori 和 megan。第二個策略隨機選取名稱,每次會產生不同的結果。在這種情況下,結果為 andy 和 megan。

策略模式非常適合複雜資料管理系統或資料處理系統,二者在資料篩選、搜尋或處理的方式方面需要較高的靈活性。

PHP設計模式(5)策略模式

在此模式中,演算法是從複雜類提取的,因而可以方便地替換。例如,如果要更改搜尋引擎中排列頁的方法,則策略模式是乙個不錯的選擇。思考一下搜尋引擎的幾個部分 一部分遍歷頁面,一部分對每頁排列,另一部分基於排列的結果排序。在複雜的示例中,這些部分都在同乙個類中。通過使用策略模式,您可將排列部分放入另乙個類中...

php 設計模式(策略模式)

策略模式是將一組特定的行為和演算法封裝成類,以適應某些特定的上下文環境,這就是策略模式 電商類 針對男生和女生要跳到不同的商品類目,並且所有廣告位展示不同的廣告 中會出現 if男生 if女生 硬編碼 當需求改變時所有 都需要改變,這種情況就需要使用 策略模式因為策略模式 跟上下文的環境是中立的沒有依...

PHP設計模式 策略模式

其實就是同一方法的不同實現,類似於重寫。和工廠模式有一樣的效果,但是策略模式更注重方法的重寫,尤其是一種方法。工廠模式更注重類的不同,直接導致很多方法的不一樣。abstract class baseagent 用於客戶端是ie時呼叫的類 環境角色 class ieagent extends base...