php 设计模式(五)策略模式 | Leezhiy Blog

php 设计模式(五)策略模式

什么是适配器模式

定义:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,并让它们可以相互替换,这种模式就是策略模式。

简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果

为什么要用策略模式

使用设计模式之后,我们的代码冗余和耦合度变低,每个策略模块完成对应的功能

当然缺点就是一个功能我们就要响应制作一个策略类,但是我们统观MVC架构当中(ThinkPHP,Laravel),一个控制器对应一个视图,其实也是策略设计模式的体现了。

示例

业务场景

在一个电商网站中,根据用户的性别来展示不同的商品。我们有展示商品的类目(function showCategory())和展示的广告(function showAd())

实现方式

首先我们要定义一个接口,接口中定义需要实现的方法。

然后分别定义不同的类来实现接口中的方法。

最后在根据用户的不同,分别 new 不同的方法。

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
<?php

/**
* 父类接口
* Interface UserInterface
*/
interface UserInterface
{
/**
* 展示广告
* @return mixed
*/
public function showAd();

/**
* 展示分类
* @return mixed
*/
public function showCategory();
}

/**
* 男性用户实现展示接口
* Class MaleUser
*/
class MaleUser implements UserInterface
{
/**
* 展示广告
* @return mixed|void
*/
public function showAd()
{
echo "电子产品";
}

/**
* 展示分类
* @return mixed|void
*/
public function showCategory()
{
echo "电子数码";
}
}

/**
* 女性用户实现展示接口
* Class FemaleUser
*/
class FemaleUser implements UserInterface
{
/**
* 展示广告
* @return mixed|void
*/
public function showAd()
{
echo "化妆品";
}

/**
* 展示分类
* @return mixed|void
*/
public function showCategory()
{
echo "服装分类";
}
}

if ($_GET['male']) {
$user = new MaleUser();
} else {
$user = new FemaleUser();
}
$user->showAd(); // 根据用户性别展示各自的广告分类

小结

总的来说,我们在开发中的设计原则如下:

(1).找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起

(2).针对接口编程,不针对实现编程

(3).多用组合,少用继承。

Buy me a cup of milkshake 🍨.
------------- 💖 🌞 本 文 结 束 😚 感 谢 您 的 阅 读 🌞 💖 -------------

欢迎关注我的其它发布渠道