设计模式-策略模式理解

同一个行为,用不同的方案可以去完成,这个方案我们可以叫他策略或者规则;通过对方案一个个的独立封装,结构更清晰,而且可以消除条件语句;这种模式就是用来封装算法的,比如在不同时间使用不同的业务规则;

简单结构:

  1. 一个基础类:可以是抽象类也可以是接口
  2. 多个策略(算法或规则)类:继承上诉基础类
  3. 一个能判断使用哪一个策略的Context类:在这里调用相应的策略对象,这个类;与工厂类比较相似

举个栗子

<?php 
/**
* abstract class
*/
abstract class Strategy
{
    // 算法方法
    abstract public function AlgorithmInterface();    
}
/**
* 算法a
*/
class ConcreteStrategyA extends Strategy
{
    public function AlgorithmInterface()
    {
        echo "算法a实现\n";
    }
}
/**
* 算法b
*/
class ConcreteStrategyB extends Strategy
{
    public function AlgorithmInterface()
    {
        echo "算法b实现\n";
    }
}
/**
* 算法c
*/
class ConcreteStrategyC extends Strategy
{
    public function AlgorithmInterface()
    {
        echo "算法c实现\n";
    }
}
/**
* 上下文context
*/
class Context
{
    private $strategy;
    function __construct($strategy)
    {
        $this->strategy = $strategy;
    }
    public function contextInterface()
    {
        $this->strategy->AlgorithmInterface();
    }
}
$context = new Context(new ConcreteStrategyA());
$context->contextInterface();
$context = new Context(new ConcreteStrategyB());
$context->contextInterface();
$context = new Context(new ConcreteStrategyC());
$context->contextInterface();
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容