Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2面向对象设计_Symfony_Oop - Fatal编程技术网

Symfony2面向对象设计

Symfony2面向对象设计,symfony,oop,Symfony,Oop,我面临一个面向对象的设计问题。。。我的目标是建立一个改进系统。 理解起来非常简单,下面是代码示例: <?php interface Improvement { public function getGains(); public function isActivated(); } // tagged "improvement" class AImprovement implements Improvement { public function getGai

我面临一个面向对象的设计问题。。。我的目标是建立一个改进系统。 理解起来非常简单,下面是代码示例:

<?php 

interface Improvement {
    public function getGains();
    public function isActivated();
}

// tagged "improvement"
class AImprovement implements Improvement {

    public function getGains() {
        return 1;
    }

    public function isActivated() {
        return true;
    }

}

// tagged "improvement"
class BImprovement implements Improvement  {

    private $statsCenter;

    public function __construct(StatsCenter $statsCenter) {
        $this->statsCenter = $statsCenter;
    }

    public function getGains() {
        return 10;
    }

    public function isActivated() {
        return $statsCenter->getStats()['totalGains'] > 10;
    }

}

class ImprovementCenter {

    private $improvements;

    public function addImprovement(Improvement $improvement) {
        $this->improvements[] = $improvement;
    }

    public funtion getGainsSum() {
        $s = 0;
        foreach ($this->improvements as $improvement) {
            $s += $improvement->getGains();
        }
        return $s;
    }

}

class StatsCenter {

    private $improvementCenter;

    public function __construct(ImprovementCenter $improvementCenter) {

        $this->improvementCenter = $improvementCenter;

    }

    public function getStats() {

        return [
            'totalGains' => Money::toEUR($this->improvementCenter->getGainsSum())
        ];

    }

}

我认为消除循环引用的唯一方法是使改进依赖于顺序。通过这种方式,我将使用装饰器模式进行改进,并根据以前的改进做出所有决策。使用这种方法,类improvementcenter将不再存在,StatScenter可以在getstats中得到改进。我看到的消除循环引用的唯一方法是使改进依赖于顺序。通过这种方式,我将使用装饰器模式进行改进,并根据以前的改进做出所有决策。使用这种方法,类improvementcenter将不再存在,并且Statister可以在getstats中得到改进。