您现在的位置是:网站首页>文章内容文章内容

设计模式--策略模式

李鹏2023-02-14PHP477人已围观

策略模式是一种行为型模式,它将对象和行为分开,将行为定义为一个行为接口和具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。本模式使得算法可独立于使用它的用户而变化,它的本质是分离算法,选择实现。

策略模式的特点:具体算法从具体业务处理中独立,策略算法是形同行为的不同实现(多态),客户端选择上下文来具体实现策略算法

使用场景:同一个算法,有很多不同的实现情况,根据不同个体情况选择具体行为的实现。

优点:避免让客户端涉及到重要算法和数据,避免使用难以维护的多重条件选择语句,易扩展

缺点:判断逻辑在客户端,需求改变时,要更改客户端的程序。客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。只适合扁平的算法结构。

策略模式代码示例:

<?php

abstract class GoHomeMethod{
    abstract public function ActionGoHome(string $user);
}

class FlyGoHome extends GoHomeMethod{
    public function ActionGoHome(string $user)
    {
        echo $user."坐飞机回家";
    }
}

class CarGoHome extends GoHomeMethod{
    public function ActionGoHome(string $user)
    {
        echo $user."自驾回家";
    }
}

class GoHome{
    private $method;
    
    function __construct($method)
    {
        $this->method = $method;
    }
    
    public function actionGo(string $user)
    {
        $this->method->ActionGoHome($user);
    }
}

$obj1 = new GoHome(new CarGoHome);
$obj1->actionGo('张三');//张三自驾回家

echo "<br/>";

$obj1 = new GoHome(new FlyGoHome);
$obj1->actionGo('李四');//李四坐飞机回家
?>
0

文章评论

我的名片

姓名:李鹏

职业:PHP工程师

现居:广东-深圳

网址:https://www.lipeng93.cn