设计模式-策略模式理解

2020-02-28  本文已影响0人  winter_coder

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

简单结构:

  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();
上一篇下一篇

猜你喜欢

热点阅读