设计模式中的抽象类与简单类 - 策略

时间:2015-05-07 11:50:31

标签: php design-patterns strategy-pattern

这两种方法有区别吗?如果是,哪种方法更好?

第一种方法。 使用抽象类:

//Client class:
class Client extends Context
{
    public function insertData()
    {
        $this->chooseStrategy(new DataEntry());
        $this->algorithm();
    }
    public function findData()
    {
        $this->chooseStrategy(new SearchData());
        $this->algorithm();
    }
    public function showAll()
    {
        $this->chooseStrategy(new DisplayData());
        $this->algorithm();
    }
}
//Context class:
abstract class Context
{
    private $strategy;
    public function chooseStrategy(IStrategy $strategy)
    {
        $this->strategy = $strategy;
    }
    public function algorithm()
    {
        $this->strategy->algorithm();
    }
} 

第二种方法。 使用简单的类

//Client class:
class Client
{
    public function insertData()
    {
        $context = new Context(new DataEntry());
        $context->algorithm();
    }
    public function findData()
    {
        $context = new Context(new SearchData());
        $context->algorithm();
    }
    public function showAll()
    {
        $context = new Context(new DisplayData());
        $context->algorithm();
    }
}
//Context class:
class Context
{
    private $strategy;
    public function __construct(IStrategy $strategy)
    {
        $this->strategy = $strategy;
    }
    public function algorithm()
    {
        $this->strategy->algorithm();
    }
} 

两种方法都使用相同的IStrategy接口和相同的策略类。

0 个答案:

没有答案
相关问题