策略模式

  1. 概念
    • 将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,并让它们可以相互替换,这种模式就是策略模式。
    • 简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果
  2. 优点
    • 使用设计模式之后,我们的代码冗余和耦合度变低,每个策略模块完成对应的功能。
    • 当然缺点就是一个功能我们就要响应制作一个策略类,但是我们统观MVC架构当中(Thinkphp,Yii2),一个控制器对应一个视图,其实也是策略模式的体现了。
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
<?php
interface UserInterface
{
public function showAd();
public function showCategory();
}

//男性用户实现接口
class MaleUser implements UserInterface
{
public function showAd()
{
echo '电子产品';
}
public function showCategory()
{
echo "PS5,PC,Switch";
}
}

//女性用户实现接口
class FemaleUser implements UserInterface
{
public function showAd()
{
echo '化妆品';
}
public function showCategory()
{
echo "口红,面膜";
}
}

//客户端实现,根据性别不同推荐不同内容
$sex = 'male';
if ($sex == 'male') {
$user = new MaleUser();
} else {
$user = new FemaleUser();
}

$user->showAd();
$user->showCategory();