PHP策略模式定义与用法示例

2025-05-27 0 90

本文实例讲述了php策略模式定义与用法。分享给大家供大家参考,具体如下:

概述

策略模式属于对象的行为模式。其用意是针对一组算法,将每个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化

uml图

PHP策略模式定义与用法示例

策略模式中主要角色

这个模式设计到三个角色:

环境角色(context):持有一个strategy的引用
抽象策略(strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体的策略类所需的接口
具体策略(concreatestrategy)角色:包装了相关的算法或行为

使用场景

假设现在要设计一个购物车系统,一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这个复杂。例如:对普通会员无折扣,对中级会员提供8折优惠,对高级会员提供7折优惠。

根据上述描述,货品价格是根据以下几个算法中的一个进行的:

对普通会员无折扣
对中级会员8折
对高级会员7折

uml图

PHP策略模式定义与用法示例

实现代码:

?

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

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93
<?php

/**

* 策略抽象类

* @author wzy

*

*/

interface strategy

{

public function calprice ($price);

}

/**

* 普通会员策略类

*

* @author wzy

*

*/

class primarystrategy implements strategy

{

public function calprice ($price)

{

echo "普通会员无折扣";

return $price;

}

}

/**

* 中级会员策略类

*

* @author wzy

*

*/

class middlestrategy implements strategy

{

public function calprice ($price)

{

echo "中级会员8折优惠";

return $price * 0.8;

}

}

/**

* 高级会员策略类

*

* @author wzy

*

*/

class highstrategy implements strategy

{

public function calprice ($price)

{

echo "高级会员7折优惠";

return $price * 0.7;

}

}

/**

* context实现类

*

* @author wzy

*

*/

class price

{

/**

* 具体的策略类对象

*

* @var object

*/

private $strategyinstance;

/**

* 构造函数,传入一个具体的策略对象

*

* @param object $instance

*/

public function __construct ($instance)

{

$this->strategyinstance = $instance;

}

/**

* 计算货品的价格

*

* @param double $price

*/

public function quote ($price)

{

return $this->strategyinstance->calprice($price);

}

}

/**

* 客户端操作

*/

$high = new highstrategy();

$priceclass = new price($high);

$price = $priceclass->quote(400);

echo $price;

?>

回顾策略模式

策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的扩展性和维护性

算法的平等性

策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是一样的,这样才能实现算法之间的互相转换

运行时策略的唯一性

运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只有一个

希望本文所述对大家php程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP策略模式定义与用法示例 https://www.kuaiidc.com/72089.html

相关文章

猜你喜欢
发表评论
暂无评论