【问题标题】:There is a Design Pattern related to this solution?有与此解决方案相关的设计模式吗?
【发布时间】:2015-09-07 16:56:47
【问题描述】:

有一个我经常使用的解决方案,想知道有没有和这个解决方案相关的设计模式:

我想修改一个对象的属性,我想将每个职责分离到不同的类中,并且能够更轻松地添加/删除这些职责。

有 Pattern 来命名这个解决方案吗?这是一个很好的解决方案还是有另一种模式可以更好地修复它?

谢谢!

class Choice 
{
    private $isSelected;

    private $isRight; 
}

class ChoiceModifierInterface
{
    public function modify();
}

class Selector
{
    public function modify(Choice $choice)
    {
        //check if the user select the question 
        $choice->isSelected(true);
    }
}

class Corrector
{
public function modify(Choice $choice)
    {
        //check if the question is right
        $choice->isRight(true);
    }
}


class ChoiceModifier
{
    public function add(ModifierInterface $modifier)
    {
        //add classes
    }

    public function modify(Choice $choice)
    {
        foreach ($this->modifiers as $modifier)
        {
            $modifier->modify($choice);
        }
    }
}

class Client
{
    public function main()
    {
        $choiceModifier = new ChoiceModifier();
        $choiceModifier->add(//add all modifiers);

        //run all modifiers
        $choiceModifier->modify($choice);
    }
}

【问题讨论】:

    标签: php oop design-patterns


    【解决方案1】:

    我不是 PHP 开发人员,但它看起来是 Composite pattern

    我通常使用复合模式的方式是使用日志记录。当我想同时记录到多个地方(如文件、一些云错误跟踪系统、调试窗口等)时,我创建单个记录器抽象,然后在所有记录器中实现此抽象并创建复合记录器。复合记录器记录器也实现了记录器接口,它包含所有其他记录器的集合。 Composite logger 的唯一职责是将调用委托给它包含的所有 logger。这样,您只需在客户端代码中调用一次即可登录到多个位置。

    我从未使用复合模式来修改对象状态,但我可以想象在某些情况下它可能是一个很好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      相关资源
      最近更新 更多