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

2021-09-21 11:30:12 字數 3873 閱讀 9238

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

<?php

//策略介面

inte***ceistrategy

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

classfindafterstrategyimplementsistrategy

publicfunctionfilter($record)

}

//定義另一種策略

classrandomstrategyimplementsistrategy

}

//定義使用者列表類

classuserlist

}

}

publicfunctionadd($name)

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

publicfunctionfind($filter)

return$recs;

}

}

//初始化使用者列表

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

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

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

echo'

'
;

print_r($f1);

echo'';

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

$f2=$ul->find(newrandomstrategy() );

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...